ロックフリーのデータ構造とタイミング コードを実装する場合、多くの場合、コンパイラの最適化を抑制する必要があります。通常、人々はclobber リストでasm volatile
withを使用してこれを行いますが、ときどき単なるまたは単純なclobbering メモリが表示されます。memory
asm volatile
asm
これらの異なるステートメントは、コード生成にどのような影響を与えますか (特に GCC では、移植性が低いため)?
参考までに、これらは興味深いバリエーションです。
asm (""); // presumably this has no effect on code generation
asm volatile ("");
asm ("" ::: "memory");
asm volatile ("" ::: "memory");