是否存在无法正确对齐 32 位变量的情况
Posted
技术标签:
【中文标题】是否存在无法正确对齐 32 位变量的情况【英文标题】:Is there cases where a 32-bit variable could not been properly-aligned 【发布时间】:2014-02-26 09:40:22 【问题描述】:在以下链接:http://msdn.microsoft.com/en-us/library/ms684122(VS.85).aspx 中,据说“对正确对齐的 32 位变量的简单读写是原子操作”。我想知道在 C++ 程序中,所有 32 位变量是否默认正确对齐。换一种说法,就是存在无法正确对齐 32 位变量的情况。
【问题讨论】:
【参考方案1】:#pragma pack(1)
struct _not_aligned
uint8_t a;
uint32_t b; // unaligned 32-bit
;
#pragma pack()
【讨论】:
【参考方案2】:如果您不告诉编译器这样做,那么它将正确对齐 32 位变量。
您可以编写将 32 位变量放置在非对齐地址的代码(例如,通过创建一个 char
数组,并将您的 int 写入数组中的奇数索引)。
您也可以使用编译器#pragmas 告诉编译器不要对齐特定类型或变量。
但是,如果您不这样做,那么您的变量将正确对齐。
【讨论】:
以上是关于是否存在无法正确对齐 32 位变量的情况的主要内容,如果未能解决你的问题,请参考以下文章