[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/24 15:41 / Filesize : 321 KB / Number-of Response : 1024
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part137



1 名前:デフォルトの名無しさん [2018/08/27(月) 16:02:00.94 ID:vY3QDx2y0.net]
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part137
https://mevius.5ch.net/test/read.cgi/tech/1531558382/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/

■長いソースを貼るときはここへ。■
 codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
www.bohyoh.com/CandCPP/FAQ/ (日本語)

----- テンプレ ここまで -----
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

357 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 00:46:44.54 ID:49ssh0n4a.net]
>>347
pthread使ってる以外はほぼ同等な考え方です
実例作っていただきありがとうございます。

358 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 01:03:30.65 ID:6MRSNGru0.net]
>>326で書いたとおりスレッドAで変更したメモリをスレッドBで正しく参照できるのか否かというのは
微妙な問題なんじゃ

>>347のコードでf::nの書き換えと参照が正しく動くのは
20行目のC::f()呼び出しで呼び出されたstd::coutがメモリバリア的な効果を果たしたに過ぎないかもしれん
(中でmutexとかcritical sectionとかなシステムコールを呼んでいるなら普通のOSならメモリバリアが効く

と自尊心だけは高い低学歴知恵遅れなので難癖をつけておく
実証はしない

359 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 01:10:28.57 ID:6MRSNGru0.net]
>>347のコードがそもそもC::nがvolatile宣言されていないのに安全に動いている理由は…
と始めると荒れる…!

それはともかくスレッド間のメモリの読み書きを>>341のmutexでガードするというのは大変良い心がけです
多少遅いかもしれないが遵守する限り泥沼に踏み込まずに済む

360 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 01:32:58.78 ID:LCjnyCTn0.net]
>>322
メインスレッドとサブスレッドで並列に起動して同じ変数を書き換えた場合、書き換えレースになる。
ロックっていう機構があるのでそれを参照。

361 名前: mailto:sage [2018/09/08(土) 01:41:37.02 ID:t7GfMYxV0.net]
>>351
よろしければ教えていただけますか?

>20行目のC::f()呼び出しで呼び出されたstd::coutがメモリバリア的な効果を果たした
メモリバリアって要するに x86 の lfence, sfence, mfence のことですか?
これはCPUキャッシュがメインメモリに吐き出されることを保証するものですか?
これらの命令は Pentiumu2 あたりにはなかったと思います、でも Pen2 とか特に Celeron-BP6(abit) で普通にデュアルプロセッサできていたのはどうしてでしょうか?

362 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 02:36:49.43 ID:6MRSNGru0.net]
>>353
>これはCPUキャッシュがメインメモリに吐き出されることを保証するものですか?
ちげう
実行したコアのライトコマンドキューかリードコマンドキュー上の命令をその場で全部実行してしまうというもの
キャッシュのinvalidateやfillが起きるかどうかとは別の話(結果的に起きることもあるが常にではない
キャッシュと関係あるみたいな説明のページがあることは承知しているが苦情は漏れに言わないでホスイ

>これらの命令は Pentiumu2 あたりにはなかったと思います、でも Pen2 とか特に Celeron-BP6(abit) で普通にデュアルプロセッサできていたのはどうしてでしょうか?
古代の話は知らん
OoO(アウトオブオーダー実行)はすでにあったはずなので、ライトコマンドキューやリードコマンドキューもすでにあった
全くの推測だが、キャッシュのinvalidate操作が(invalidateを常に伴うため効率の悪い)メモリバリアと同じ効果があったとかではないかいや知らんけど

363 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 02:52:26.13 ID:6MRSNGru0.net]
ちなIA(Intel Architecture)のうちでも常識的なコア数のやつは
コア間のキャッシュコヒーレンシをハードウェアで勝手に取ってくれるので、
コア間のメモリ参照の不整合はメモリバリアだけ注意したら逝ける(キャッシュの存在は透過的

364 名前:はちみつ餃子 mailto:sage [2018/09/08(土) 02:58:07.14 ID:VmsJpbI+0.net]
>>353
こないだ atomic を使ってたけど、
atomic について調べたならそこらへんの話もどこかに書いてなかったか?
C++ 用語ではバリアでなくてフェンスって言ってるけど。

365 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 03:04:22.19 ID:RizVmglH0.net]
メメリバリアやフェンスの意味を知るにはcpuのメモリモデルの理解が必要

https://yohhoy.hatenablog.jp/entry/2014/12/21/171035



366 名前: mailto:sage [2018/09/08(土) 03:04:32.58 ID:t7GfMYxV0.net]
>>354
>実行したコアのライトコマンドキューかリードコマンドキュー上の命令をその場で全部実行してしまうというもの
>キャッシュのinvalidateやfillが起きるかどうかとは別の話(結果的に起きることもあるが常にではない

なるほど…ちょっとだけ理解が進んだかもしれません
「はるか遠くにあるメインメモリに変更が反映されるか

367 名前:どうか」はプログラムの書き手にはあまり関係がなく、
「各コアから見る限りにおいて、各コアが発したライトあるいはリードの結果すべてが反映され、各コアからはみえている」と考えればいいのですね

これらのメモリの可視性について http://www.cs.tsukuba.ac.jp/~yas/cs/csys-2013/2013-10-15/ 等を熟考しています
mutex や cond にその方面での効用があるとは…、pthread のメモリ可視性に関する効果はあまり意識していませんでした

重要なヒントをくださりありがとうございます
[]
[ここ壊れてます]

368 名前: mailto:sage [2018/09/08(土) 03:17:34.12 ID:t7GfMYxV0.net]
>>356
ええ、atomic に関係する話をいろいろと読んではいたのですが、正直なところ、あまりよくわからなかったことを告白します
acquire とか release とか、いまひとつイメージできなかった…
atomic の各メンバ関数の memory_order は C++デフォルト引数として sequence-consist(ency) を与えていることはわかりましたので「最強にしているから、まあいいか」くらいですましていました

>>354
>実行したコアのライトコマンドキューかリードコマンドキュー上の命令をその場で全部実行してしまうというもの
この記述が一番しっくりきました

369 名前: mailto:sage [2018/09/08(土) 04:20:01.69 ID:t7GfMYxV0.net]
>>352
>書き換えレース
ええと、これを読んで reset-set flip-flop の禁止入力「R=S=1」のことを思い出してしまったんですが、それはさておき

複数のコアが同一メモリに対して「同時に書き込み」する、というのは、このフリップフロップ禁止入力と同じ意味あいですか?
つまり「どっちの書き込みが後になるか、予想がつかないから禁止」…@

それとも、「複数のコアが本当に同時に書き込んでしまった場合、結果が不定になる」…A
(昔のフロッピーディスク供給のソフトウェアプロテクトの方法としての「コロコロビット」=読み出すたびに 0/1 が変わる)という意味なのか

いや、@もAも同じような意味なのかもしれませんが、
>>215 の「CAS 連続スピンロックや CAS 連続スピンロック中に別コアから書き込んだり読み込んだりすること」
がAの意味で危険で、ソフトウェア側で mutex や dirty-bit (>>238) を設けて本当に意図的にコントロールしなければならないのか、と、ちょっと心配になりました
最初から安全側にふっておくとは思いますが

370 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 08:05:39.39 ID:RizVmglH0.net]
考える前に学んだ方がいい

cas が使い物にならないならなぜそんな物があると思う?
というか mutex の実装にも cas は使用される。

使い方がわからないからcasは使わず mutex を使うという判断は正しいが、
例えば前の例のエラトステネスの篩で実装1ビットセットする毎に
mutex で排他していたらコアがかなり沢山あってもシングルスレッドの方が速い
(mutex api を処理する時間が大半を占めてしまう)

371 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 08:13:01.68 ID:RizVmglH0.net]
質問する前にスレッドセーフとか排他制御とかレースコンディションとか
弱いメモリモデルとかでググって時間くらいしっかり読んで

372 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 08:13:34.47 ID:RizVmglH0.net]
>時間くらい
「1時間くらい」のタイプミスでした。

373 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 11:49:10.23 ID:+e2Zk2SC0.net]
>>360
cpuのメモリモデルの説明読んだら最初の方に書いてあると思うけど
普通ワード単位のアクセスは何もしなくてもハード的にアトミックであることが保証されてる
そこで壊れたらやってられないからな

374 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 13:52:50.37 ID:UCzuGyPmM.net]
>>360
> つまり「どっちの書き込みが後になるか、予想がつかないから禁止」…@
順序は予測できないと言うのは正しい

> それとも、「複数のコアが本当に同時に書き込んでしまった場合、結果が不定になる」…A
通常

375 名前:のプロセッサならこれはない
排他制御がなされていてどちらかの結果が最終的に反映される

ただ CAS (Compare And Swap) 命令はそう言う話じゃなくて読出動作 (Compare) と書込動作 (Swap) がアトミック(つまりその間には他のアクセスは無いように制御されてる)ってこと
ソフトでどうのこうのできる話じゃないからシステムから提供されてるAPIを素直に使いなさい

>>364
中途半端な知識で語るなよ
[]
[ここ壊れてます]



376 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 16:38:24.58 ID:+lRq1NsW0.net]
>>364
だよな
同一のCS, WE/OEをファンアウトさせるわけで
配線遅延があってもクロック同期で関係なくなるし

377 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 20:07:53.81 ID:6MRSNGru0.net]
このスレは荒れる…!

マルチスレッド、マルチコア、アウトオブオーダー実行(OoO)にまつわる3つの問題は分けて考えられねばならない;
 (A) 書き換えレースの問題(>>352
 (B) アドレスxに対する読み書きのatomic性(>>364
 (C) メモリバリア(>>354

(A)はマルチスレッドすればシングルCPUでも起きる問題
(B)はこれは何ビット幅までの読み書きを他コアが割り込み不可能なバスサイクルで行えるかという話。マルチコア固有
(C)はマルチコア状況化でのアウトオブオーダー(OoO)実行の影響をソフトで制御して無問題にするテクの話で、マルチコア×OoO固有の話

>>364は(B)のことを言っており、だいたい合っているんじゃ
(IAの場合、4バイト境界に整列した32ビットまでは(B)の意味でatomicに読み書きできる
 整列していないデータの読み書きは16 bitであっても(B)の意味でatomicではない
 インテルのマニュアルに書いてある
 自尊心だけは高い低学歴知恵遅れなのでいちいちソースは示さないが

378 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 20:29:14.34 ID:6MRSNGru0.net]
とはいえ、読み書きをミューテックスなりロックなりでガードする、…(D)
これだけを遵守すれば>>367の問題は全部忘れて良い(>>351の後段にも書いた)
メモリモデルとかまともに勉強する必要は無い
さらに言うと、まともなコンパイラなら(中でどんな副作用やメモリバリアを行うかわからない)システムコールを跨いだ
変数のレジスタ割り当てとかしないから、(D)を守れば実際のところ(ほとんどのケースで)volatileも要らん

メモリモデルを勉強する必要があるのは、(D)の速度に不満が生じて改善する必要に迫られたとき、
例えばdouble-checked lockingテクがちゃんと動くのかとか不安になったりロックレスハッシュを作らねばならなくなったときだけ!

379 名前:デフォルトの名無しさん mailto:sage釣 [2018/09/08(土) 22:09:03.01 ID:Mc6Ny40VM.net]
>>367
マルチプロセッサとかNUMAの事は考慮しなくても良いのけ?

380 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 23:30:32.50 ID:ZUEeKRTR0.net]
バスサイクルと言ったりミューテックスって言ったり話のレベルがぐちゃぐちゃすぎる…

381 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 01:33:18.67 ID:XJaXrhZ00.net]
なんせC++は生ポが使える低水準言語ですし・・・

382 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 03:24:55.55 ID:Q3MV1FJL0.net]
要するにあらゆる左辺値をatomicにして更にミューテックスでガードしとけば(これはキチガイ)
ハード系の知識を学ぶ必要はない(ハードソフトという名の蛸壺)という無茶苦茶な主張だな
勉強嫌いにもほどがあるだろ、何が低学歴だ

383 名前:デフォルトの名無しさん mailto:sage釣 [2018/09/09(日) 08:36:42.55 ID:BqWnELncM.net]
周辺チップからのメモリ書換をミューテックスでガード出来るのか

384 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 08:59:15.50 ID:9h0HyZsY0.net]
実際プログラミングする上でハードの知識はいらんだろ

385 名前:デフォルトの名無しさん mailto:sage釣 [2018/09/09(日) 09:25:43.25 ID:BqWnELncM.net]
ハードの知識無しでデバドラ書けるのけ?



386 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 10:19:49.00 ID:Q3MV1FJL0.net]
>>374
メモリのゴーストとか普通に出てくるだろ
PCという狭い牧場から出たことのない家畜は知らんだろうけど

387 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 10:31:54.13 ID:9h0HyZsY0.net]
>>375
は?プログラミングが書けると言っただけでデバドラのプログラミングするなんて言ってねえよ
じゃあお前は信号処理を知らずに音声合成のプログラミング書けるのか?
>>376
だからそんなの考慮知らなくもソフトウェアは作れるんですが

388 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 10:37:46.17 ID:kQslwDxe0.net]
作文したら推敲しろ、って小学校で習うはずなんだけどな

389 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 10:39:04.08 ID:9h0HyZsY0.net]
>>378
え?
お金も払われないのに推敲?
時間の無駄じゃん

390 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 11:01:35.79 ID:Q3MV1FJL0.net]
>>377
ああ家畜か
人間よばわりして悪かったな

391 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 11:25:28.91 ID:lGJ+2GvF0.net]
ハードウェア部分を隠すためのOSによるアクセスの抽象化とか、
標準ライブラリがあるわけだし、ハードウェアの知識が絶対に必要でもないでしょ。

デバイスドライバを書くプログラマが優れているとか、その反対に
高レベルな(抽象度の高い)ソフトを作る人ほど偉いってものでもない。

392 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 11:26:29.90 ID:l6rR/pccM.net]
>>380
逆に家畜はお前じゃね?
ハードウェアを意識しないとプログラミング出来ないなんて可哀相

393 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 14:43:15.61 ID:TxROatu90.net]
何これ?

394 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 15:02:39.54 ID://bKOaXP0.net]
いつものマウントごっこだろ

395 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 16:27:56.67 ID:TAQT5wBea.net]
for i in {0..15}; do
mount /dev/dm-$i /mnt
done



396 名前:デフォルトの名無しさん [2018/09/09(日) 17:06:11.77 ID:V1LakR3i0.net]
捕食される側の人類最底辺同士で争ってる

397 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 17:19:50.37 ID:xES8AK750.net]
低レベルプログラミングって言う面白そうな本が出てたなあ

398 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 18:06:25.87 ID:acpzPeVw0.net]
そういえば、さいきんの低レベルいじる時ってどうするんやろね。
BIOSなくなってきてるし、作法かわってきてるのかなぁ・・・。

399 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 18:53:37.14 ID:+aTtRZce0.net]
古き良きシリアルポートが普通のPCではほぼ絶滅してるからなあ
USBきらい

400 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 19:01:40.42 ID:acpzPeVw0.net]
USB制御のノウハウってあんまり周知されてない感じがする。

401 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 19:09:08.66 ID:Q3MV1FJL0.net]
アイソクロナス?

402 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 19:38:22.19 ID:eYgKQZDEM.net]
>>382
高級ってのを誤解しているアホがここにもいたわw

403 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:21:28.72 ID:TxROatu90.net]
>>390
LINE EYEで見てるとエラー出まくったりしてるね

404 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 22:46:19.98 ID:IGaBABI/d.net]
dllからexeをCreateProcessで起動するとメモリリークするとかある?
debugging tool forなんたらみたいなやつでメモリリークチェックしてるのだけど
exeから呼んだやつはリークなし
dllから呼んだやつはリークありとなっている
監視開始ポイントと終了ポイント及び呼び出しソースコードに差分がなく
その他にも差分がないんだ

405 名前:デフォルトの名無しさん [2018/09/10(月) 23:03:06.10 ID:XzQQxj6r0.net]
dllから呼びだす場合
dllは呼びだした側のプロセスと同じアドレス空間にマッピングされ
dll側の関数を呼び出して生成されたヒープも
呼びだした側のプロセスと同じアドレス空間にマッピングされる

プロセスから呼び出した場合、
呼び出した側のプロセスと関係ない呼び出された側のプロセスのアドレス空間に
ヒープは生成されるから
呼び出した側のプロセスを監視してもそのリークについて検出されることはない

分かった?



406 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 05:56:49.25 ID:3QLqjO4o0.net]
質問と回答が違う

407 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 09:46:04.97 ID:THBnA1g1M.net]
そのツールでもうちょっと情報とれないんかいって思うが、
ランタイムライブラリの指定とか見直してみたら?
というかexe起動を繰り返したら繰り返すだけリークする?
最初の一度だけならあんまり気にしなくていいんじゃない?しらんけど

408 名前:デフォルトの名無しさん [2018/09/11(火) 22:07:19.41 ID:i7axZbyN0.net]
質問通りの
コレ以上ないエレガントなレスになってる

409 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 22:09:50.93 ID:BTBlWiGG0.net]
あかねちゃん。

410 名前:デフォルトの名無しさん mailto:sage [2018/09/12(水) 00:18:15.71 ID:B23czwA60.net]
>>394
umdhじゃないかと思うが、スタックトレースは見てみたの?
プロセスの標準入出力に名前付きパイプが指定されてるとdllの明示的なアンロードのタイミングでApplication verifierでリーク検出されたことはあった。

411 名前:デフォルトの名無しさん mailto:sage [2018/09/12(水) 09:57:57.91 ID:OqmF7RQ90.net]
>>394
dll ってことは何かの exe の中で動いてるんだろ
そっちのコードが他スレッドで何かアロケートしてるとか

単に dll の問題で CreateProcess しなくてもリークしてるとか

412 名前:デフォルトの名無しさん mailto:sage [2018/09/12(水) 19:18:39.87 ID:BIkz+Ggud.net]
>>397
>>395
>>400
>>401
色々とありがとう。UMDHです
色々と試してみたところ繰り返し行ってもリーク量は増えなかったので、自分が作成したロジック以外でのリークみたいでした
UMDHは増えず、タスクマネージャー上のプライベートメモリとかが増えてくのは気になったけども....

413 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 01:05:55.69 ID:y0a2qOvJ0.net]
>>402
メモリはコミットサイズを確認。
あとはハンドルをクローズしてないとかはないよね。

414 名前:はちみつ餃子 mailto:sage [2018/09/14(金) 01:26:50.31 ID:NOYHI4qj0.net]
>>402
UMDH は増えずにタスクマネージャー上のプライベートメモリが増えるということは必ずしも問題があるわけではない。
(もちろん問題がある場合もある。)
malloc や new で割り当てるメモリは、
OS からある程度のメモリを融通してもらった塊をアプリケーションのレイヤ (ランタイムライブラリ) で切り分けて提供することになる。
足りなくなったらまた OS に要求する。
しかしその要求というのも、メモリ空間を予約するだけで物理メモリはまだ割り当てないかもしれない。

「プライベートメモリ」というのは予約したメモリ空間のサイズを表すらしく、
実際のメモリ使用量を表さないので、
基本的には UMDH をあてにした方が良いと思う。

415 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 04:46:07.61 ID:Ln8BSCnm0.net]
gflagsで対象exeのメモリ割り当てをコンパチブルモードにしてみたら



416 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 07:55:52.78 ID:05hGeAAsd.net]
>>403
コミットサイズを確認すれば良いんですね
ハンドルクローズもしてますね
ありがとうございます

>>404
分かりやすくありがとうございます
差分が出ることもあり得るのですね
丁寧でとても助かりました

417 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 20:22:01.09 ID:KUzt6BBd0.net]
プログラム全体で使いたい変数を宣言する際は
グローバル変数として宣言するのと#defineするのって何か違います?
どっちを使えばいいんですかね?

418 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 20:34:55.91 ID:9HmXun5pa.net]
#define という事は定数だと思われるのでconstexprな変数に一票。

419 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 20:44:10.13 ID:kDrjUGbb0.net]
グローバル変数だとコンパイルのときにエラーを出してくれる
#defineは値がヘンでもエラーを出さない

420 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 20:54:15.35 ID:c9w6X9S4M.net]
どっちとか言う前にもう少し言語仕様を理解してこいよ…

421 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 21:06:34.91 ID:YK4Q2JFR0.net]
>>407
そのレベルならいったんdefineは忘れるべき。
defineはほとんどの場合ただの置換に過ぎない。

422 名前:デフォルトの名無しさん [2018/09/14(金) 21:31:46.88 ID:fXySkelb0.net]
C++なら値変更不可な参照のみのシングルトンにしとけばいい
シングルトンを動的にイニシャラズできるようにすれば起動時に設定の変更ができたりするようにできる

めんどくさかったらdefineでいい
defineかえてコンパイルしなおせばしまいだからな
そういうdefineはカテゴリー毎にまとめてぜんぶ一か所に書いときなさい

シングルトンでも裸の外部変数はやめておいたほうがいい
それさえしなければどうでもいい

423 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 21:53:36.47 ID:YK4Q2JFR0.net]
し、シングルトン?
この話題でまさかのsingleton笑
さすがにこれはネタだよね?

424 名前:デフォルトの名無しさん [2018/09/14(金) 21:55:11.25 ID:fXySkelb0.net]
外部変数はシングルトンの変数だからな
なにもおかしくない

425 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 21:56:25.39 ID:YK4Q2JFR0.net]
ここで言ってるsingletonって所謂GoFデザインパターンのsingletonだよね?



426 名前:デフォルトの名無しさん [2018/09/14(金) 21:58:26.14 ID:fXySkelb0.net]
そもそも池沼のID:YK4Q2JFR0はdefineがなにかすらわかってないからな

> defineはほとんどの場合ただの置換に過ぎない。

ほとんどもへったくれもなく
defineはただの置換だからな

頭悪い

427 名前:デフォルトの名無しさん [2018/09/14(金) 21:59:24.65 ID:fXySkelb0.net]
頭悪いやつはムリしてレスしなくていい
なにもわかってないんだからな

428 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 22:01:10.88 ID:gH/Sje3Q0.net]
>>416
結合と文字列化もあるから「ほとんど」であってるが

429 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 22:01:20.46 ID:YK4Q2JFR0.net]
いつもの半角くん病が発症したらしいw
毎度毎度、燃料投下、お疲れ様ですm(_ _)m

430 名前:デフォルトの名無しさん [2018/09/14(金) 22:02:21.10 ID:fXySkelb0.net]
defineか外部変数にしたいとかいう質問だからな
普通にグローバルを定数値をもたせたいという質問内容なのに
このスレの低学歴知恵遅れたちがどう解釈したかはしらない

431 名前:デフォルトの名無しさん [2018/09/14(金) 22:02:53.11 ID:fXySkelb0.net]
結合も文字列かもただの置き換え

432 名前:デフォルトの名無しさん [2018/09/14(金) 22:05:22.67 ID:fXySkelb0.net]
まず低学歴知恵遅れは日本語を読解する能力がない
ものごとも抽象的にみる能力もない
つまり認知機能に著しい欠陥がある

433 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 22:05:58.57 ID:BDjkgOYf0.net]
ID真っ赤にして火病起こしたか

434 名前:デフォルトの名無しさん [2018/09/14(金) 22:06:56.64 ID:fXySkelb0.net]
静的にどう置換されるかコンパイル時に決定されてるからな
このスレに池沼たちは、いつもなにをいってるか意味不明なワケ

435 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 22:07:36.57 ID:YK4Q2JFR0.net]
>>420
こういうtypoをツッコむのは本来嫌いなんだが、せっかく燃料投下してくれたお礼に一応指摘。
「グローバルを定数値をもたせたい」
毎回言うけど、C言語の前に日本語勉強したほうがええで。



436 名前:デフォルトの名無しさん [2018/09/14(金) 22:09:30.41 ID:fXySkelb0.net]
低学歴知恵遅れが指摘できるのはこの程度
自分の著しい頭の悪さを棚にあげるからな

グローバルに定数値をもたせたい

とまともな日本語読解能力があれば
普通に読めるからな

437 名前:デフォルトの名無しさん [2018/09/14(金) 22:10:14.11 ID:fXySkelb0.net]
ともかくとてつもなく頭悪い
しかもとてつもなく頭悪いという自覚がない

438 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 22:10:23.49 ID:YK4Q2JFR0.net]
>>426
よしよし、今日は素直でよろしい。

439 名前:デフォルトの名無しさん [2018/09/14(金) 22:11:29.39 ID:fXySkelb0.net]
で、オマエは自分の頭が
とてつもなく頭悪いのは自覚してんか

ゴミでクズな人間であることも自覚できてんのか

440 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 22:12:33.95 ID:YK4Q2JFR0.net]
さすがにもうワンパターンで飽きてきた。
もっと違う煽り方考えてよ。
ツンデレ的なのはどう?

441 名前:デフォルトの名無しさん [2018/09/14(金) 22:14:52.54 ID:fXySkelb0.net]
煽り?
まず事実だからな

バカは自分がバカである自覚がない
だからバカが直らない

すべてゴミでクズな人間性の問題
ゴミクズには内省というもんがない

442 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 22:18:12.66 ID:YK4Q2JFR0.net]
最初は褒めて褒めて褒めちぎった上でミスリードを誘い、その上でボロクソに貶すとかどう?
さすがに皆そのやり方は飽き飽きしてるよ。

443 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 22:34:27.68 ID:5DPUkElZ0.net]
子猫がかわいくて甘噛みされたらちょっと叩いたあとで頭なでなでしてたら
大人になっても強くかむようになって困ったのを思い出した

なんだかなあ

444 名前:デフォルトの名無しさん [2018/09/15(土) 00:40:17.11 ID:KIanXBkQ0.net]
オレはこんなことはしてないからな

                        タカイ
                     ∧_∧ タカーイ
                  m⊂(´・ω・)⊃
                ⊂c  ノ__  ノ
             /⌒ヽ  | .|  | .|                /⌒ヽ
            ( ^ω^) i i二 .ノ               _( ^ω^) il|   死ね
          (´  二二二 ノ                (´ \   \|il |il il|
         /    /:                  /  \. \ノ\. \il| |il|
        i===ロ==/                   i===ロ== ヘ. \. i|!l !l\il|
       ノ:::::::::::::::::ヽ                  ノ:::::::::::::::::ヽ \ ヽη /')/')
      /:::::::::::へ:::::::::ヽ                /:::::::::::へ:::::::::ヽ  ヽ_,,..)  /
     /::::::_/   \:::::::)              /::::::_/   \:::::::)   )  ( / /
   /::_ '´      |::::|            /::_ '´      |::::| ⊂(v   )⊃
   レ          しつ           レ          しつ`) \ 〆 (´ ̄           
                                         /⌒Y⌒ヽ
ただの被害妄想
オレは事実を書き込んでるだけだからな
まず事実が事実であることを自覚するところから


445 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 01:10:27.96 ID:FCP8vuXka.net]
バイナリファイルの読み書きはfstreamとFILEどちらがオススメですか?



446 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 01:53:04.57 ID:wlkSFfZ20.net]
#include <iostream> is Forbidden

447 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 04:03:10.64 ID:x4qTic2YM.net]
FILE

448 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 06:14:52.60 ID:/OsufeBT0.net]
>>407 を虚心坦懐に読めば
「#defineじゃ定数値しか作れんのだから変数にする以外ない」
という身も蓋もない答えもありうるわな。
さすがにそんな揚げ足取りをする人はいないみたいだけど。

プログラム全体で参照する定数値をconstのグローバル変数にするか
#defineにするか、なら一般的にはconst変数の方が好まれるかな。
const変数の利点と言うより、#defineの弊害を避けるためって理由で。

その定数が整数値なら enum class も候補に入れてくれ。
static_castが面倒臭いかも知れんけど。

449 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 08:40:54.56 ID:8TAknpK9d.net]
ここまでconstexpr1つもなしなのはみんな意図的?

450 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 09:11:50.04 ID:pVwVWDM8M.net]
>>439
つ 408

451 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 09:12:10.24 ID:hHXkfIbs0.net]
>>439 >>408

452 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 09:39:05.72 ID:u2jcQID60.net]
整数の定数くらいならconstexpr付けても付けてなくても大して変わらなくない?
const int n = 42; と constexpr const int n = 42; って何が違うの
どっちも定数式文脈で使えるでしょ

453 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 10:09:16.49 ID:8TAknpK9d.net]
>>440
>>441
節穴だった申し訳

454 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 10:28:10.96 ID:wlkSFfZ20.net]
constexpってクソださい仕様だよな
勝手に推論して最適化しとけや

455 名前:デフォルトの名無しさん [2018/09/15(土) 11:23:26.53 ID:oMwX4DqWa.net]
>>438
関連性のある定数群をまとめる為にはスコープがあるenum classはいいんだけど、
フラグとして使うのが難しいのがちょっと難点

enum class PNG_COLOR_MASK: uint8_t{
GRAY = 0b000,
PALETTE = 0b001,
RGB = 0b010,
ALPHA = 0b100
}
enum class PNG_COLOR_TYPE: uint8_t{
GRAYSCALE = PNG_COLOR_MASK::GRAY,//できない
RGBA = PNG_COLOR_MASK::RGB | PNG_COLOR_MASK::ALPHA//できない
}



456 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 14:56:24.44 ID:u2jcQID60.net]
フラグとして使うならoperator|と&をオーバーロードするのが良いけど面倒だね

PNG_COLOR_MASK operator|(PNG_COLOR_MASK e1, PNG_COLOR_MASK e2)
{

 using u_t = typename std::underlying_type<PNG_COLOR_MASK>::type;

 return PNG_COLOR_MASK((u_t)e1 | (u_t)e2);

}

457 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 15:34:42.86 ID:oMwX4DqWa.net]
ここまでやって更にstatic_castも必要となるという。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<321KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef