【发布时间】:2013-01-18 17:02:53
【问题描述】:
我正在阅读旧版 C++ 代码,其中内存屏障定义如下。主要操作系统是 linux 和 vxworks。编译器是 gcc(WindRiver's gcc)。
#if((KCompilerGNU)||(kCompilerWindRiver))
#define MEMORY_BARRIER __asm__ volatile("nop\n");
#else
#define MEMORY_BARRIER __asm nop;
#endif
但我没有看到无操作操作如何产生内存屏障?或者它只是一个错误的实现?
【问题讨论】:
-
您可能对内存屏障有错误的解释。你可能认为它的意思是 fence。写它的人可能意味着它是一种填充物。即用于填充代码以对齐特定边界。
-
遗留代码在很多地方使用它作为内存栅栏的目的,你可以清楚地分辨出来。顺便说一句,nop 如何作为对齐目的?
-
它是一种填充物。如果您知道您的代码是 15 个字节并且需要在更多内容之前将其填充到 16 个字节(在 x86 上),有时人们会插入一个 nop。这里:stackoverflow.com/questions/234906/…
标签: c++ memory-barriers