Nav*_*een 9 c++ winapi multithreading multicore interlocked
在阅读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);
}
Run Code Online (Sandbox Code Playgroud)
以上代码在多处理器系统中是否正常工作,还是应该更加关注?
Tor*_*ack 15
这取决于您的编译器设置.但是,默认情况下,任何八个字节及以下的内容都将在自然边界上对齐.因此,"int"我们在32位边界上对齐.
此外,"#pragma pack"指令可用于更改编译单元内的对齐.
我想补充一点,答案假设是Microsoft C/C++编译器.打包规则可能因编译器而异.但总的来说,我认为大多数Windows的C/C++编译器使用相同的打包默认值只是为了使Microsoft SDK头更容易使用.
| 归档时间: |
|
| 查看次数: |
14576 次 |
| 最近记录: |