- 7 名前:デフォルトの名無しさん mailto:sage [2015/12/05(土) 11:13:41.33 ID:NRX1k+Is.net]
- >>6
レスdクス、 まあint b = aと同じことなんですが、既存コードの高速化のため、 関数先頭に片っ端からconst int m_x = g_foo.m_x;(Fooのメンバ関数ならconst int m_x = Foo::m_x;)を挿入する「だけ」のソースコード変更で実験中なう >ポインタ操作があっても一回しか読まれないわけで。 グローバル変数g_xと、別のグローバル変数のメンバg_foo.m_xが同一実体のaliasでありえないことはコンパイラにもひと目でワカルんでしょうけども、 問題はg_xのアドレスが関数引数で渡され、その関数内でg_foo.m_xを直接読むケースが悩ましい… 該当するケースについて、渡されてくるポインタを__restrictにすれば解決なんですが、これは怖くて機械的にはやれない および参照で渡されたとき、参照の___restrictは比較的新しいコンパイラでないと対応していない… >型ベースの aliasing rule もあるし。 言わんとすることは多分わかるんですが、 そこまで逝くともはやどこまでコンパイラの気持ちになれば良いのかわからん…
|

|