gpt4 book ai didi

即使结构体成员按递减对齐方式排序,C 是否可以在结构体成员之间添加填充?

转载 作者:行者123 更新时间:2023-12-02 17:59:25 25 4
gpt4 key购买 nike

struct Foo {
int a;
char b;
};

在这种情况下,是否可以保证 b 在结构中的偏移量为 sizeof(int) ?只要满足所有对齐要求,是否可以保证成员会打包在一起,不需要填充(不考虑末尾的填充以将结构大小与最大成员对齐)?

我问这个是因为我想知道是否简单地使用 fwrite()write()struct 保存到文件如果struct的布局在不同平台上不一致,可能会导致问题,因为每个保存文件都将特定于创建它的平台。

最佳答案

没有任何保证。如果编译器希望在结构成员之间插入不必要的填充,它可以这样做。 (例如,它可能已经确定,如果某个特定成员是八字节对齐的,则可以更有效地处理该成员,即使它根本不需要对齐。)

用于互操作性的可移植代码不应fwrite struct。除了填充方面可能存在差异之外,并非所有平台都使用相同的字节顺序,也不是相同的浮点表示(如果相关的话)。

关于即使结构体成员按递减对齐方式排序,C 是否可以在结构体成员之间添加填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74806168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com