0

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

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

4

1 回答 1

1

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

您也可以通过声明一个 char 结构和使用 sizeof()。它将返回对齐的大小。

于 2013-10-14T23:58:20.663 回答