gpt4 book ai didi

c - C中的内存对齐

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

这是一个片段:

#pragma pack(4)
struct s1
{
char a;
long b;
};
#pragma pack()

#pragma pack(2)
struct s2
{
char c;
struct s1 st1;
};
#pragma pack()


#pragma pack(2)
struct s3
{
char a;
long b;
};
#pragma pack()

#pragma pack(4)
struct s4
{
char c;
struct s3 st3;
};
#pragma pack()

我虽然sizeof(s4)应该是10或者12,但是结果是8。我正在使用 Visual C++ 6.0。谁能告诉我为什么?

最佳答案

#pragma pack(2)
struct s3
{
char a;
long b;
};
#pragma pack()

所以s3的packing alignment是2,它的size是1(alignment 1)+1(padding)+4(alignment 2)=6。

#pragma pack(4)
struct s4
{
char c;
struct s3 st3;
};
#pragma pack()

s4的packing alignment为4,其大小为1(alignment 1)+1(padding)+6(alignment 2)=8。

请注意,#pragma pack 不会“额外对齐”任何具有宽松对齐要求的内容。它只会减少对齐,即控制“打包”对齐。

关于c - C中的内存对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13558904/

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