我有结构
typedef struct EData
{
int a;
char c;
}
Edata obj;
a
是整数变量,因此需要4个字节,c
是char变量所以它需要
1个字节,总共5个字节
但是当我打印sizeof(obj)
时,它会显示 8个字节。
是什么原因?
答案 0 :(得分:4)
因为在32位系统上,内存在4byte (32bit)
边界对齐,所以它必须是4字节的倍数,请参阅Data structure alignment
答案 1 :(得分:3)
int
是4个字节,char
是1个字节。但是,您的编译器aligns each struct
to a word(32位架构上的一个字是4个字节),因为它可以提高性能。因此,EData
的每个实例将向上舍入为2个字(或8个字节)。
你最终得到的是这样的:
typedef struct EData {
int a;
char c;
char padding[3];
}
答案 2 :(得分:1)
您注意到的大小增加是由于编译器的填充 编译器添加额外的字节以强制执行正确的字节边界 因此编译器会根据其类型添加额外的字节以强制每个成员的正确位置 有一个选项可以阻止编译器执行此操作(打包指令),但最好避免它(除了在角落情况下)
答案 3 :(得分:0)
如果您遇到问题,可以使用#pragma
或编译器开关(各种编译器都有这样的开关)。