在实现无锁数据结构和时序代码时,通常有必要抑制编译器的优化。通常情况下,人们会在“障碍物”列表中使用asm volatile
with进行此操作memory
,但有时您会看到只是asm volatile
或仅有一个简单的asm
障碍物记忆。
这些不同的语句对代码生成有什么影响(尤其是在GCC中,因为它不太可能移植)?
仅供参考,以下是一些有趣的变化:
asm (""); // presumably this has no effect on code generation
asm volatile ("");
asm ("" ::: "memory");
asm volatile ("" ::: "memory");