次のことを考慮してください。
volatile uint32_t i;
gccがiを揮発性として処理したかどうかを知るにはどうすればよいですか?近くのコードがそれを変更することはなく、何らかの割り込みが原因で変更される可能性があるため、そのように宣言されます。
私は世界最悪のアセンブリプログラマーではありませんが、テレビで再生しています。誰かがそれがどのように異なるかを理解するのを手伝ってもらえますか?
次の愚かなコードを取る場合:
#include <stdio.h>
#include <inttypes.h>
volatile uint32_t i;
int main(void)
{
if (i == 64738)
return 0;
else
return 1;
}
それをオブジェクト形式にコンパイルし、objdumpを介して逆アセンブルし、「volatile」を削除した後に同じことを行います。違いはありません(diffによる)。揮発性宣言は、チェックまたは変更された場所に近すぎますか、それとも揮発性を宣言するときに常に何らかのアトミックタイプを使用する必要がありますか?いくつかの最適化フラグはこれに影響しますか?
注意してください、私の愚かなサンプルは私の質問と完全には一致していません、私はこれを理解しています。私はgccが変数を揮発性として処理したかどうかを調べようとしているだけなので、違いを見つけるために小さなダンプを調べています。