gpt4 book ai didi

c - c结构的64位对齐/填充?

转载 作者:太空狗 更新时间:2023-10-29 15:22:25 25 4
gpt4 key购买 nike

struct tag_t_ {
u_int8_t op;
u_int8_t num;
u_int32_t labels[5];
};

在上面的结构中,64 位编译器会在什么地方添加填充字节?
它是在第一个标签之前还是在第一个标签的末尾?
如果填充位于第一个标签的末尾,在访问(读取)32 位 archs 中的第一个标签时是否会导致任何错误结果?

最佳答案

我在 64 位系统中运行它——结构的内存映射是

offset:  variable
0: op num
2: 00 00 // only 2 paddings
4: label0
8: label1
...
20: label5

大小(结构)== 24

//这里可以在字符和第一个 32 位整数之间放置一个 unsigned short 而不会影响结构的大小。

结构填充的规则是宽度为 W 的任何基本变量都将与该宽度对齐。 Double 作为第二个参数将导致在 op 之后有 7 个填充字节,在 num 之后只有 3 个填充字节,因为 labels[0] 将从可被 4 整除的偏移量开始。

32/64 位系统之间存在差异:32 位系统仍会将 8 字节变量与 32 位边界对齐。 64 位系统会将 long int 和 double 对齐到 8 字节边界。

这将使在 32 位系统中使用该结构变得安全。如果结构中有 double ,仍然可以使结构与仔细规划变量兼容。

关于c - c结构的64位对齐/填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13264215/

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