gpt4 book ai didi

c - 为什么这个结构定义会额外增加一个字节的内存使用量?

转载 作者:行者123 更新时间:2023-12-01 12:56:08 25 4
gpt4 key购买 nike

#include <stdio.h>
typedef struct {
short x,y;
char type;
} Tile;

int main(int argc, const char *argv[])
{
printf("%d\n",sizeof(short));
printf("%d\n",sizeof(char));
printf("%d\n",sizeof(Tile));
return 0;
}

输出是:

2
1
6

我预计 sizeof(Tile) 为 5,而不是 6。这是一种明确定义的行为,结构会增加一个额外的内存使用字节,还是取决于实现?

最佳答案

这是因为填充(有点像舍入)。

例如:

struct example1
{
char a;
int b;
char c;
}

struct example2
{
char a;
char b;
int c;
}

可能大小不同,第一个大小为 12B,第二个可能只占用 8B(取决于架构和编译器)。

编辑:gcc 根据结构的最大成员的大小进行填充。

Gcc 可以通过选项 -fpack-struct 最小化这种行为,但这可能不是最好的主意,它甚至可能适得其反(我首先想到的是网络协议(protocol)实现)。

关于c - 为什么这个结构定义会额外增加一个字节的内存使用量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9730830/

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