【问题标题】:Is padding ever added to this C structure? [duplicate]填充是否曾经添加到这个 C 结构中? [复制]
【发布时间】:2021-04-24 09:37:21
【问题描述】:

如果我将 C 结构定义为,

typedef struct
{
  double data[2];
} my_struct;

是否有可能将填充添加到这样的结构中?或者我可以安全地假设 sizeof(my_struct) 在所有系统上总是 2*sizeof(double) 吗?

【问题讨论】:

    标签: c


    【解决方案1】:

    允许编译器实现在字段之间或最终字段之后的结构中添加 any 填充。

    在这种情况下可能不会,因为您只有一种数据类型,但不能保证它不会。

    如果您需要控制特定于实现的行为,许多实现将为您提供该级别的控制,例如#pragma pack

    即使您拥有该级别的控制,您也可以使用标准功能至少在编译时捕获问题(C11 或更高版本):

    #include <assert.h>
    typedef struct { double data[2]; } my_struct;
    static_assert(sizeof(my_struct) == sizeof(double) * 2, "I do not like padding");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      相关资源
      最近更新 更多