我正在处理有关数据类型的一些非常基本的C问题。我正在定义一个结构体(layout_t
,如下面的代码片段所示),并且我期望该结构体的大小(由sizeof(layout_t)
返回)为1 + 8 + 1 + 1 = 11个字节,不是吗?如果我编译此代码(gcc -o test.e test.c
)时得到的结构大小为24,这是怎么回事?我有一种印象,我在这里错过了一些非常愚蠢的东西...但我无法弄清楚...
谢谢!
/* test.c */
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
typedef struct {
uint8_t f1;
uint64_t f2;
uint8_t f3;
uint8_t f4;
} layout_t;
int main()
{
printf("layout %lu\n", sizeof(layout_t));
printf("uint8_t %lu\n", sizeof(uint8_t));
printf("uint16_t %lu\n", sizeof(uint16_t));
printf("uint32_t %lu\n", sizeof(uint32_t));
printf("uint64_t %lu\n", sizeof(uint64_t));
return 0;
}
/* test.e output
layout 24
uint8_t 1
uint16_t 2
uint32_t 4
uint64_t 8
*/