可能重复:
Why isn't sizeof for a struct equal to the sum of sizeof of each member?
我有下一个代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct Test
{
int a;
int b;
char c;
} Test;
int main(void)
{
Test *obj = (Test*)malloc(sizeof(Test));
printf("Size results:\r\n\r\nstruct: %i\r\nint #1: %i\r\nint #2: %i\r\nchar #1: %i\r\n",
sizeof(Test), sizeof(obj->a), sizeof(obj->b), sizeof(obj->c));
return 0;
}
结果是:
尺寸结果:
struct:12
int#1:4
int#2:4
char#1:1
为什么结构大小为12个字节? int - 4个字节 char - 1个字节
2 int + 1 char = 2 * 4 bytes + 1 byte = 9 bytes。
为什么12 ???
答案 0 :(得分:2)
内存通常在4字节边界上对齐,因此即使char只占用1个字节,它也会填充3个字节以满足此分段要求。值得注意的是,结构的各个元素不必对齐,因此如果将其中一个整数形成为short,则可以将结构大小从12减少到8个字节。我相信你必须把结构声明中的字符旁边的短片放到这个奖金上。
答案 1 :(得分:1)
如果你正在使用gcc,你可以强制“打包”。这意味着没有进行任何对齐,并且结构条目彼此相邻。尝试
typedef struct Test
{
int a;
int b;
char c;
} __attribute__((packed)) Test;