是否存在无法正确对齐 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 位变量的情况的主要内容,如果未能解决你的问题,请参考以下文章

C++结构对齐问题

Linux创建2TB以上分区,以及正确的对齐磁盘

代码检查错误列表

是否有任何情况下有效的 C 代码无法使用 g++ 正确编译 [重复]

proteusstm32仿真无法进入定时器中断

win32位操作系统java包不能运行