C中的数据类型不一致?

时间:2019-01-31 18:06:00

标签: c

我正在处理有关数据类型的一些非常基本的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
*/

0 个答案:

没有答案