在以下链接中:http://msdn.microsoft.com/en-us/library/ms684122(VS.85).aspx,据说“对正确对齐的32位变量的简单读写是原子操作”。我想知道在c ++程序中是否所有32位变量默认都是正确对齐的。换句话说,有些情况是32位变量无法正确对齐。
答案 0 :(得分:3)
#pragma pack(1)
struct _not_aligned {
uint8_t a;
uint32_t b; // unaligned 32-bit
};
#pragma pack()
答案 1 :(得分:1)
如果你没有告诉编译器不这样做,那么它将正确对齐32位变量。
你可以编写将32位变量放在非对齐地址的代码(例如通过创建char
数组,并将int写入数组中的奇数索引)。
您还可以使用编译器#pragmas告诉编译器不以对齐特定类型或变量。
但是如果你不做任何这些,那么你的变量将正确对齐。