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

Is there cases where a 32-bit variable could not been properly-aligned

本文关键字:对齐 情况 存在 32位 变量 是否      更新时间:2023-10-16

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

#pragma pack(1)
struct _not_aligned {
uint8_t a;
uint32_t b; // unaligned 32-bit
};
#pragma pack()

如果不告诉编译器执行其他操作,那么它将正确对齐32位变量。

可以编写将32位变量放置在非对齐地址的代码(例如,通过创建char数组,并将int写入数组中的奇数索引)。

您还可以使用编译器#pragmas告诉编译器不要对齐特定类型或变量。

但如果你不这样做,那么你的变量就会正确对齐。