【发布时间】:2013-01-05 03:03:47
【问题描述】:
在实现无锁数据结构和时序代码时,通常需要抑制编译器的优化。通常人们使用asm volatile 和memory 在clobber 列表中执行此操作,但有时您只会看到asm volatile 或只是一个普通的asm 破坏内存。
这些不同的语句对代码生成有什么影响(特别是在 GCC 中,因为它不太可能是可移植的)?
仅供参考,以下是有趣的变化:
asm (""); // presumably this has no effect on code generation
asm volatile ("");
asm ("" ::: "memory");
asm volatile ("" ::: "memory");
【问题讨论】:
-
似乎有人在离金属太近了 :-) (在其他地方,@Mysticial 正在输入一个可笑的详细答案......)
标签: c gcc inline-assembly