掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
構造体の値が1バイトずれる (ID:60781)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
共有メモリ=他プロセスなどで変更されるメモリ=不明なタイミングで変更されうるメモリ なわけで volatile を指定しないとうまく動かない可能性が高くなります。 int shared_memory; // volatile が必要なのにつけてない ... if (shared_memory==0) {...} // ループとかしなけりゃ大丈夫なんだが while (shared_memory==0) {...} // ループするととたんにダメ 比較等を直接行わない場合であっても、たとえば以下のような場合 ループ内部で shared_memory を変更するコードが無いから、ループ直前に shared_memory をレジスタに持ってくるコードを生成する可能性あり ソレはおそらく希望の動作とは異なる for (i=0; i<NNN; ++i) { x[i]+=shared_memory; } >aを参照するような処理(aの内容をファイルに出力など)を追加すると その処理の前後で a が変更されうる、とコンパイラが判断したので最適化対象を外れた すなわちその後の処理では新しく a を読み直すようなコードを生成した ってことで volatile の付け忘れを疑いました。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.