关于特定结构的数据对齐

时间:2013-10-14 23:49:52

标签: c++ performance build alignment

这可能是非常基本的问题,但在尝试解决某个Valgrind issue时遇到了它们。显然,错误是由自定义结构上的未初始化的填充字节引起的。虽然我已经掌握了结构填充的整个概念,但我仍然对如何管理数据对齐存有疑虑。我已经在几个网站和Q& A上找到了很多关于这个主题的信息,但我仍然有一些挥之不去的怀疑:

字节对齐(数据块读取的大小)是否在系统范围内设置,由编译器为整个程序选择,或者特定于我的代码中的每个结构(如果是,则在二进制文件上进行硬编码) ?究竟什么是与系统架构的关系(32对64位)?我怎么能找到我目前使用的默认值?

1 个答案:

答案 0 :(得分:1)

在32位系统上它是4个字节,在64位上 - 8个字节
您可以更改特定结构/类的对齐方式,或使用pragma pack
获取默认值 MSDN article
GCC also supports it

你也可以通过声明一个char结构并使用sizeof()来找出默认值。它将返回对齐的大小。