c/c++结构体内存对齐(vc6.0)

首先编译环境是vc6.0

在sizeof(结构体)时,内存对齐的方式总结:

首先找到整个结构体中占用字节最大的类型,假设它占用的字节数为M,然后开始按声明顺序依次相加,得到字节数m,如果m总字节数不足M,则往后看下一位的字节n,如果m+n>M,则先不计算n,先将m变为M,然后由n开始计算。(可能表述的不够清楚,还是看例子)

(1)     第一种定义方式

 struct A{        

      int a;

      char c;

      double b;       

};

 调用sizeof(A)得到的结果是16。

最大的字节数是8个字节

int型占4个字节,m = 4, m<8

char型占1个字节,4+1 = 5 < 8

double型占8个字节,5+8>8;

所以5个字节先对齐,变为8个字节。

然后再看double,8+8=16个字节。

(2)第二种定义方式

struct B

{

      int a;

      char c;

      int d;

      double b;

};

调用sizeof(B)得到的结果是24。

int型占4个字节,m = 4 < 8

遇到char型, m = 5  < 8

遇到int型,m + n  > 8,

所以前5个字节先对齐变为8,

再看int型,为4

double为8,4+8>8

所以4个字节也内存对齐变为8个字节

看double型,8个字节。8+8+8=24。

(3)第三种定义方式

      struct C

      {

           int a;

           char c;

           char d;

           double b;

      };

调用sizeof的结果是16

4 < 8

4+1 < 8

4+1+1<8

4+1+1+8>8,4+1+1 = 8

8+8 = 16。

(4)第四种定义方式

      struct D{      

           int a;

           double b;

           char c;

      };

调用sizeof的结果是24

4 < 8

4+8>8

4 = 8, 8=8

1<8 1 =8

 8+8+8 =24。

欢迎拍砖。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值