アカウント名:
パスワード:
馬鹿なストーリー採用してんなよアホか
「ふーん、ちなみに ++x と x++ の比較と、*++x と *x++ の比較では事情が違うよね?」と振って、相手が反応するかどうかで話を聞く価値があるかどうか値踏みできそうな気がする。でも、組み込みとかデバドラとかのレイヤのコーディングしてる人とか、HPCの人とか以外は、パフォーマンスのボトルネックのありかがよそにあるので、こんな些細な話はそもそもあまり気にしないのではないのかな。
多分、期待されているような差は無いかと。
例えば、以下の2つは同じコードにコンパイルされる。INC1はINC2の形に最適化されてループは消える。
int _X=0;int *x=&X;void INC1(){ *x = 0; for(int i = 0; i < 3; i ++){ (*x)++; }}
void INC2(){ *x = 3;}
いやまて、
void OUTPUT(){ while(true){
> いきなり3を代入するんじゃなくて、*xを徐々に0~3まで増やして貰わないと困る、
困るような使い方をしてる時はvolatile を付けましょう。「volatile int* x」なら大丈夫。INC1は毎回加算後にメモリ書き込みされます。
#組み込み系のコードで、割り込みルーチンと本ルーチンで同じ変数を参照するのはよくある話。#で、「正常動作しないので最適化はオフにしておいてください」とかいう説明してるのもたまに見かけたりして…#ちゃんとvolatile付けろよとツッコミを入れたくなります。
C++だと、volatileだとまだ効きが弱くて、「memory_orderほげほげ<int>」とかが必要だったかと。詳しくは>「メモリモデル」[検索]
もちろん、mutexなどのスレッド同期機構に頼っても実現可能ですが、それよりも、メモリモデルに従ってメモリバリアを張った実装の方が一般に動作は速くなります。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家
どのコンパイラではどういうコードに落ちてどのプロセッサではどう実行されるみたいな話がないと無意味 (スコア:-1)
馬鹿なストーリー採用してんなよアホか
Re: (スコア:1)
「ふーん、ちなみに ++x と x++ の比較と、*++x と *x++ の比較では事情が違うよね?」
と振って、相手が反応するかどうかで話を聞く価値があるかどうか値踏みできそうな気がする。
でも、組み込みとかデバドラとかのレイヤのコーディングしてる人とか、HPCの人とか以外は、パフォーマンスのボトルネックのありかがよそにあるので、こんな些細な話はそもそもあまり気にしないのではないのかな。
Re: (スコア:-1)
多分、期待されているような差は無いかと。
例えば、以下の2つは同じコードにコンパイルされる。INC1はINC2の形に最適化されてループは消える。
int _X=0;
int *x=&X;
void INC1(){
*x = 0;
for(int i = 0; i < 3; i ++){
(*x)++;
}
}
void INC2(){
*x = 3;
}
いやまて、
void OUTPUT(){
while(true){
Re: (スコア:1)
> いきなり3を代入するんじゃなくて、*xを徐々に0~3まで増やして貰わないと困る、
困るような使い方をしてる時はvolatile を付けましょう。
「volatile int* x」なら大丈夫。INC1は毎回加算後にメモリ書き込みされます。
#組み込み系のコードで、割り込みルーチンと本ルーチンで同じ変数を参照するのはよくある話。
#で、「正常動作しないので最適化はオフにしておいてください」とかいう説明してるのもたまに見かけたりして…
#ちゃんとvolatile付けろよとツッコミを入れたくなります。
Re:どのコンパイラではどういうコードに落ちてどのプロセッサではどう実行されるみたいな話がないと無意 (スコア:0)
C++だと、volatileだとまだ効きが弱くて、「memory_orderほげほげ<int>」とかが必要だったかと。詳しくは>「メモリモデル」[検索]
Re: (スコア:0)
Re: (スコア:0)
もちろん、mutexなどのスレッド同期機構に頼っても実現可能ですが、
それよりも、メモリモデルに従ってメモリバリアを張った実装の方が一般に動作は速くなります。