gpt4 book ai didi

c++ - 填充和对齐——误解

转载 作者:搜寻专家 更新时间:2023-10-31 00:36:21 34 4
gpt4 key购买 nike

给定以下非常简单的结构:

struct A {

int a;
double b;

};

(使用 Mac OS 10.9 - Xcode)

结构的大小是 16。我不明白为什么。为什么不是12? 12是4的倍数。我在这里缺少什么?

谢谢

编辑:

struct B {

int a;
char b[4];
char c[4];
};

这个结构的大小是12。所以,这意味着它是一个合格的大小。为什么编译器然后用另外 4 个字节填充第一个结构?

最佳答案

编译器和体系结构可能更喜欢 double b 的地址在 8 字节边界上对齐,因为 sizeof(double) == 8 就像它更喜欢int a 的地址在 4 字节边界上排列。

因此,编译器可能会在“int a”和“double b”之间插入 4 个字节的“填充”,以便两个变量可以在预期边界上对齐。

大多数编译器通常提供一种方法来关闭填充(对网络/磁盘序列化很有用),但它依赖于编译器。在 Windows 上它是 #pragma pack(1)。在 gcc 上它是 __attribute__ ((packed)) 不确定 Mac/Clang 是否有类似的属性。

关于c++ - 填充和对齐——误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22110756/

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