gpt4 book ai didi

c - 内存对齐和结构大小

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:08 24 4
gpt4 key购买 nike

假设我定义了以下结构:

struct MyData { 
int a;
char b;
int c;
byte d;
byte e;
}

我依稀记得读过该结构的大小不仅取决于数据类型,还取决于内存对齐方式。在 32 位 CPU 上,MyData 结构为 4 字节 + 1 字节 + 4 字节 + 1 字节 + 1 字节 = 11 字节。这是我的问题,内存对齐是否会增加结构的大小:4 字节 + 1 字节(+3 字节填充)+ 4 字节 + 1 字节(+3 字节填充)+ 1 字节(+3 字节填充)= 20 字节。

这是错的吗?我错过了什么吗?这是特定于语言的东西吗?我可以打包结构吗?如果可以,有什么优缺点?

谢谢!

最佳答案

编译器可以根据需要填充结构。通常,最后两个 byte 不会被填充分隔,因此大小将变为 4 (int) + 1 (char) + 3 (padding) + 4 (int) + 1 (字节)+ 1(字节)+ 2(填充)= 16

许多编译器允许根据编译指示打包结构。这样做的好处是更少的内存使用,缺点是非对齐的 int 成员的读取速度较慢。

关于c - 内存对齐和结构大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10132262/

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