美文网首页
C语言结构体内存分配

C语言结构体内存分配

作者: StephenCurry300 | 来源:发表于2019-12-31 14:05 被阅读0次

    废话不多说,直接通过🌰来看一下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

    相关文章

      网友评论

          本文标题:C语言结构体内存分配

          本文链接:https://www.haomeiwen.com/subject/hsrboctx.html