C++ 关于特定结构的数据对齐
这可能是非常基本的问题,但我在试图解决某个Valgrind问题时遇到了它们。显然,错误是由自定义结构上未初始化的填充字节引起的。虽然我已经掌握了结构填充的整个概念,但我仍然怀疑如何管理数据对齐。我在几个网站和问答中找到了很多关于这个主题的信息,但我仍然有一些挥之不去的疑问:C++ 关于特定结构的数据对齐,c++,performance,build,alignment,C++,Performance,Build,Alignment,这可能是非常基本的问题,但我在试图解决某个Valgrind问题时遇到了它们。显然,错误是由自定义结构上未初始化的填充字节引起的。虽然我已经掌握了结构填充的整个概念,但我仍然怀疑如何管理数据对齐。我在几个网站和问答中找到了很多关于这个主题的信息,但我仍然有一些挥之不去的疑问: 字节对齐(读取数据块的大小)是在系统范围内设置的,是由编译器为整个程序选择的,还是针对代码中的每个结构设置的(如果是,是在二进制文件上硬编码的)?与系统架构(32位与64位)的关系到底是什么?如何找到当前用作默认值的值 在3
字节对齐(读取数据块的大小)是在系统范围内设置的,是由编译器为整个程序选择的,还是针对代码中的每个结构设置的(如果是,是在二进制文件上硬编码的)?与系统架构(32位与64位)的关系到底是什么?如何找到当前用作默认值的值 在32位系统上是4字节,在64位系统上是8字节
您可以更改特定结构/类的对齐方式,或使用pragma pack获取默认值
您还可以通过声明一个char结构并使用sizeof()找到默认值。它将返回对齐的大小