0

可能重复:
为什么结构的 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:\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;
}

结果是:

尺寸结果:

结构:12

诠释#1:4

诠释#2:4

字符 #1: 1

为什么结构大小为 12 字节???int - 4 个字节 char - 1 个字节

2 个整数 + 1 个字符 = 2 * 4 个字节 + 1 个字节 = 9 个字节。

为什么是 12 ???

4

2 回答 2

2

内存通常在 4 字节边界上对齐,因此即使 char 仅占用 1 个字节,它也会被填充 3 个字节以满足此分段要求。值得注意的是,结构的各个元素不必对齐,因此如果您将其中一个整数设为短整数,则可以将结构大小从 12 个字节减少到 8 个字节。不过,我相信您必须在 struct 声明中的 char 旁边放置 short 才能获得此奖励。

于 2012-09-22T14:51:29.900 回答
1

如果您使用 gcc,则可以强制“打包”。这意味着没有对齐,并且结构条目彼此相邻。尝试

typedef struct Test
{
    int a;
    int b;
    char c;
} __attribute__((packed)) Test;
于 2012-09-22T15:16:12.120 回答