ロックフリーのデータ構造とタイミングコードを実装する場合、コンパイラの最適化を抑止する必要があることがよくあります。通常、人々はasm volatile
とmemory
をclobberリストで使用しますが、時にはasm volatile
と表示されるか、まったく平らなasm
メモリしか表示されません。asm、asm volatileとclobberingメモリの相違点
これらの異なるステートメントは、コード生成(特にGCCでは移植性が低い可能性があるため)にどのような影響を与えますか? 。。
asm (""); // presumably this has no effect on code generation
asm volatile ("");
asm ("" ::: "memory");
asm volatile ("" ::: "memory");
誰かが周りにあまりにも近いいじりしているようです(@mysticialは不思議な詳細な答えで打ち明けています) –