C语言结构体内存分配

2019-12-31  本文已影响0人  StephenCurry300

废话不多说,直接通过🌰来看一下C语言结构体的内存分配。

🌰1:

typedef struct _a {
    char c1;
    long I;
    char c2;
    double f;
} a;
typedef struct _b {
    char c1;
    char c2;
    long I;
    double f;
} b;
typedef struct _c {
    char c1;
    long I;
    a a1;
    char c2;
} c;

printf("%lu\n", sizeof(a));
printf("%lu\n", sizeof(b));
printf("%lu\n", sizeof(c));

打印结果如下:

32
24
56

下面通过画图的方式来讲解上面的打印结果。

WX20191231-133910@2x.png

🌰2:

#pragma pack(push)
#pragma pack(4)
typedef struct _a {
    char c1;
    long I;
    char c2;
    double f;
} a;
typedef struct _b {
    char c1;
    char c2;
    long I;
    double f;
} b;
typedef struct _c {
    char c1;
    long I;
    a a1;
    char c2;
} c;
#pragma pack(pop)

printf("%lu\n", sizeof(a));
printf("%lu\n", sizeof(b));
printf("%lu\n", sizeof(c));

打印结果如下:

24
20
40

#pragma pack(4)指定内存对齐的字节数,该🌰以4个字节进行对齐,所以内存图如下:

WX20191231-140445@2x.png
上一篇 下一篇

猜你喜欢

热点阅读