【问题标题】:About data alignment of a specific struct关于特定结构的数据对齐
【发布时间】:2013-10-22 15:50:59
【问题描述】:

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

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

【问题讨论】:

    标签: c++ performance build alignment


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 2013-06-03
      • 2019-04-12
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多