- 42 名前:はちみつ餃子 mailto:sage [2022/08/16(火) 14:05:35.67 ID:+o+ePBjP0.net]
- >>37
書いたプログラムのロジックは誤ってないと仮定して、 コンパイラによる最適化が割り込みに配慮しないなら思ったような動作にならないということはあり得る。 ある変数が途中で変更されることはないと確信できる状況なら レジスタにロード済みの値を使いまわしたりするのはごく普通の動作。 場合によっては定数にまで畳み込まれることもある。 だけど、割り込みはそうしたメインの流れと関係なく問答無用でどこにでも割り込むから齟齬が生じる。 C99 までは割り込みや平行については言語仕様ではあまり取り決めず、 動作の詳細な部分は処理系まかせなものの volatile キーワードを付けた変数は最適化が抑制されるとか、 処理系の拡張で属性指定を付けれるとかいった機能を利用してどうにかしてきた。 (たぶん POSIX にはもうちょっと詳しい規定がありそうだと思うけど私はよく知らない。) C11 以降はスレッドまわりの整備が進んだので割り込みでも活用できる部分は多いと思うんだけど、 オプショナルな仕様なので C11 の処理系として必須なわけではないんよ。 おそらくは使っている処理系・実行環境で使っているお決まりのパターンがあると思うからそういうのを探して 真似するのが手っ取り早いと思う。
|

|