トップページ > プログラム > 2015年12月08日 > zjJIjn6V

書き込み順位&時間帯一覧

2 位/142 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000001001500000007



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
Win32API質問箱 Build121 [転載禁止]©2ch.net
C++相談室 part121 [無断転載禁止]©2ch.net
GCは失敗。メモリは自分で管理せよ! その2©2ch.net
【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net

書き込みレス一覧

Win32API質問箱 Build121 [転載禁止]©2ch.net
810 :デフォルトの名無しさん[sage]:2015/12/08(火) 12:37:52.55 ID:zjJIjn6V
>>806
別人がなりすましで書き込んでいるだけだからね
IMEをグーグル日本語入力に変えてフリーズしなくなったから
本人的にはもう解決している話
C++相談室 part121 [無断転載禁止]©2ch.net
102 :デフォルトの名無しさん[sage]:2015/12/08(火) 15:56:10.25 ID:zjJIjn6V
「同一アドレスへの複数スレッドのアクセスが未定義動作」
だからといって
コンパイラは無視して最適化したりしないけどね
むしろ別スレッドから値を変更される可能性を考えて
毎回メモリからレジスタにロードしなおすコードを吐くと思うがね

確実に自分のスレッドからしかアクセスしてない自動変数
つまり、自動変数のアドレスを逆参照して別の関数に渡していたりとかしていない
自動変数に関しては、変更がなければレジスタに置きっぱとかといった最適化がかかるが

オブジェクトのメンバとかグローバル変数とかはアクセスするたびに
毎回メモリからロードすると思うし
だからこそ int i = obj.member; とかやって一旦自動変数に入れることで
コンパイラの最適化を促すテクニックが広く知られているわけだが
GCは失敗。メモリは自分で管理せよ! その2©2ch.net
249 :デフォルトの名無しさん[sage]:2015/12/08(火) 16:16:30.38 ID:zjJIjn6V
参照がなくなったタイミングで必ず開放してくれて
かつ
循環参照でも問題ない
パーフェクトなGCが有れば最高なわけだが
実際にはそんなGCは無い

となれば、通常であれば言語側は性質の異なる複数のGCを用意しておいて
使う側はシチュエーションに合わせて選べるようにしておくのが自然な発想
しかしそういう言語は殆ど無い、これが問題

といってもマークスイープ系GCが前提のC#やJavaのような言語に
RAIIの発想を持ち込もうとしても
C++のデストラクタのように自身のメンバのデストラクタを自動で芋づる式に呼び出す仕組みが
元々無いので、手動で芋づる式に解放関数を呼び出すコードを書かなければならなく
うまく行っていない
【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
92 :デフォルトの名無しさん[sage]:2015/12/08(火) 16:27:08.06 ID:zjJIjn6V
ところで結局
(unsigned)(i)

unsigned(i)
は何が違うの?
危険度は同じでは?
GCは失敗。メモリは自分で管理せよ! その2©2ch.net
251 :デフォルトの名無しさん[sage]:2015/12/08(火) 16:37:24.80 ID:zjJIjn6V
>>250
自分のクラスがファイルなんかのcloseを持つリソースをメンバに持っていたとする
そうすると、それらのメンバのリソースを明示的にcloseできるようにするために
自身もcloseを実装することになるだろう
それで、自身のcloseが呼ばれた時、勝手にメンバのcloseが呼ばれるか?
結局手動でメンバのcloseを呼び出しまわるコードを書かなければならない

C++のデストラクタならメンバのデストラクタが芋づる式に勝手に呼び出されるから
気にしなくて良い
C++相談室 part121 [無断転載禁止]©2ch.net
105 :デフォルトの名無しさん[sage]:2015/12/08(火) 16:54:20.27 ID:zjJIjn6V
そう思うんなら試してみればよいだろう

いくら排他処理が完璧でも
前にレジスタにロードした古い値を使いまわして
新しい値が反映されなかったとしたらバグるだろう

ある値はたまたまレジスタに残ったままになっていたから古い値のまま、そのまま使って
別の値はたまたまレジスタに残っていなかったから新しい値をロードしなおして
ちぐはぐのままプログラムが走ったらクラッシュするだろ

だからクラスのメンバやグローバル変数はvolatileじゃなくても毎回ロードするのが普通

さもなくば、関数でローカルな変数以外の全ての変数をvolatileにしないとダメになるけど
そんなことしなくても大丈夫なようになっている
C++相談室 part121 [無断転載禁止]©2ch.net
106 :デフォルトの名無しさん[sage]:2015/12/08(火) 16:58:26.76 ID:zjJIjn6V
第一、C++で高速化を狙うときに
メンバ変数を自動変数に代入して使うというのは有名なテクニック


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。