填充是不是曾经添加到这个 C 结构中? [复制]
Posted
技术标签:
【中文标题】填充是不是曾经添加到这个 C 结构中? [复制]【英文标题】: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) 吗?
【问题讨论】:
【参考方案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");
【讨论】:
以上是关于填充是不是曾经添加到这个 C 结构中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章