在阅读InterlockedIncrement函数时,我看到了传递的变量必须在32位边界上对齐的注释.通常我见过使用InterlockedIncrement的代码,如下所示:
class A { public: A(); void f(); private: volatile long m_count; }; A::A() : m_count(0) { } void A::f() { ::InterlockedIncrement(&m_count); }
以上代码在多处理器系统中是否正常工作,还是应该更加关注?
这取决于您的编译器设置.但是,默认情况下,任何八个字节及以下的内容都将在自然边界上对齐.因此,"int"我们在32位边界上对齐.
此外,"#pragma pack"指令可用于更改编译单元内的对齐.
我想补充一点,答案假设是Microsoft C/C++编译器.打包规则可能因编译器而异.但总的来说,我认为大多数Windows的C/C++编译器使用相同的打包默认值只是为了使Microsoft SDK头更容易使用.