Loading

C++结构体内存对齐基本原则

C++结构体内存对齐基本原则

  • 1.第一个成员在结构体变量偏移量为0 的地址处,也就是第一个成员必须从头开始。

  • 2.其他成员的偏移量为自身大小的整数倍。

  • 3.结构体总大小对最大对齐数(通过最大成员来确定)的整数倍。

实例1(论证原则2)

struct Data
{
    char arg1;
    int arg2;
};

Data Size: 8

int为4Byte,char为1Byte,计算来看arg2的偏移量为1,根据原则2,char需要补齐3Byte来保证int对齐。

实例2(论证原则3)

struct Data
{
    char arg1;
    int arg2;
    char arg3;
};

Data Size: 12

并不是按照操作系统区分的win为8的整数倍。而是按照成员变量最大的整数倍。

实例3(综合论证)

struct Data
{
    char arg0[14];
    double arg1;
    int arg2;
    char arg3;
    double arg4;
};

Data Size: 40

arg1为8Byte,arg0占据14Byte,因此需要补齐到16Byte,arg2不需要补齐,为4Byte,char占据1Byte,这时 arg4计算得到的偏移量为28+1=29,自身占据8Byte,因此需要补齐到32Byte。

总体计算Data Size: 14+(2)+8+4+1+(3)+8=40.

posted @ 2023-02-07 11:01  ligiggy  阅读(110)  评论(0编辑  收藏  举报