gpt4 book ai didi

c - 相同结构的不同尺寸,不同类型的排序

转载 作者:行者123 更新时间:2023-11-30 15:49:28 25 4
gpt4 key购买 nike

//我制作了这两个结构

struct Book1
{
int genre;
int year;
char* author;
};

struct Book2
{
int genre;
char* author;
int year;
};

//在我的主函数中,我对这两个结构都做了“sizeof()”。//由于某种原因,Book1的大小为16字节,但Book2的大小为24字节//为什么会发生这种情况?//顺便说一下,这是在 64 位 Windows 机器上,使用 Visual Studio 2012 编译的

int main(void)   
{

int test1 = sizeof(struct Book1);
int test2 = sizeof(struct Book2);


return 0;
}

最佳答案

Book1 had a size of 16 bytes, but Book2 had a size of 24 bytes //why does this happen?

对齐和填充。

char*成员的大小为 8 字节,编译器希望将其在 8 字节边界上对齐。

与两个int成员 - 每个尺寸为 4 - 在 char* 之前彼此相邻,当整个结构对齐到 8 字节并且不插入填充时,这自然就可以实现。

有一个int前一个,后一个 char* ,编译器在第一个 int 之间插入 4 个字节的填充和 char*如果结构是 8 字节对齐的,则后一个 8 字节对齐,并且在第二个 int 之前或之后(更有可能)再填充 4 个字节成员的结构大小是其成员之一所需的最大对齐方式的倍数(这是 char* 的 8 字节要求)。

关于c - 相同结构的不同尺寸,不同类型的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16268484/

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