结构的大小不等于其内容的大小

可能重复:
为什么不是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