是否存在无法正确对齐32位变量的情况

时间:2014-02-26 09:40:23

标签: c++ memory-alignment

在以下链接中:http://msdn.microsoft.com/en-us/library/ms684122(VS.85).aspx,据说“对正确对齐的32位变量的简单读写是原子操作”。我想知道在c ++程序中是否所有32位变量默认都是正确对齐的。换句话说,有些情况是32位变量无法正确对齐。

2 个答案:

答案 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告诉编译器以对齐特定类型或变量。

但是如果你不做任何这些,那么你的变量将正确对齐。