C语言结构体内存分配

废话不多说,直接通过🌰来看一下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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容