结构的大小不等于其内容的大小
可能重复:
为什么不是sizeof等于每个成员的sizeof之和?
我有下一个代码:
http://ideone.com/brmRy
#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:rnrnstruct: %irnint #1: %irnint #2: %irnchar #1: %irn",
sizeof(Test), sizeof(obj->a), sizeof(obj->b), sizeof(obj->c));
return 0;
}
结果是:
尺寸结果:
结构:12
int#1:4
int#2:4
char#1:1
为什么DOES结构大小为12字节? int - 4个字节的字符 - 1个字节
2 int + 1 char = 2 * 4字节+ 1字节= 9字节。
为什么12?
内存通常在4字节边界上对齐,所以即使char只占用1个字节,也会填充3个字节以满足此分割要求。 值得注意的是,一个结构的单个元素不必对齐,所以如果你将其中一个整型变为short,你可以将结构大小从12减小到8个字节。 不过,我相信你必须在结构声明中的char旁边加上short来获得这个奖励。
如果你使用gcc,你可以强制“打包”。 这意味着没有进行对齐,并且结构条目彼此相邻。 尝试
typedef struct Test
{
int a;
int b;
char c;
} __attribute__((packed)) Test;
链接地址: http://www.djcxy.com/p/80209.html
上一篇: Size of struct NOT equal to the size of its content
下一篇: Increasing The Size of Memory Allocated to a Struct via Malloc