【发布时间】:2021-04-24 09:37:21
【问题描述】:
如果我将 C 结构定义为,
typedef struct
{
double data[2];
} my_struct;
是否有可能将填充添加到这样的结构中?或者我可以安全地假设 sizeof(my_struct) 在所有系统上总是 2*sizeof(double) 吗?
【问题讨论】:
标签: c
如果我将 C 结构定义为,
typedef struct
{
double data[2];
} my_struct;
是否有可能将填充添加到这样的结构中?或者我可以安全地假设 sizeof(my_struct) 在所有系统上总是 2*sizeof(double) 吗?
【问题讨论】:
标签: c
允许编译器实现在字段之间或最终字段之后的结构中添加 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");
【讨论】: