gpt4 book ai didi

c++ - 结构中字段对齐的奇怪行为

转载 作者:可可西里 更新时间:2023-11-01 09:47:40 24 4
gpt4 key购买 nike

#include <iostream>
using namespace std;
#pragma pack(push, 4)
struct Foo
{
char ch; //1
char ch2; //1
char ch3; //1
char ch4; //1 _4
char ch5; //1
short num; //2
char ch6; //1 _4
int num2; //4 _4
};
#pragma pack(pop)

int main() {
cout << sizeof( Foo );
return 0;
}

为什么输出是16字节?我认为它一定是 12,因为:

4 char = 4 bytes  
char + short + char = 4 bytes
int = 4 bytes

那么有人能解释一下剩下的 4 个字节在哪里吗?

最佳答案

你得到的是内存中的以下内容(|s 是 4 字节边界):

|char char char char|char 1bytePadding short|char 3bytesPadding|int|

short需要对齐2byte的边界,所以在前面的char后面插入一个字节的padding即可。类似地,int 必须是 4 字节对齐的,所以在 char 之后必须插入 3 个字节的填充,这样就可以了。如果您正在优化空间,则经验法则是从最大到最小对成员进行排序。如果您这样做,它将是:

|int|short char char| char char char char|

如您所料,这将占用 12 个字节。

关于c++ - 结构中字段对齐的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27930760/

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