结构体在内存中如何存储?

遵循结构体对齐规则:

1.首先要知道默认对齐数:VS 中 8   Linux 4

2.第一个成员放到0偏移处

3.后面所有的成员都放到对齐数(本身和默认对齐数的较小值)的倍数处偏移

4.结构体总大小为所有对齐数中最大对齐数的倍数

Eg

wKiom1bSvGyy789oAABss3kzBJE565.png

 

运行结果为 24

 

 图中可以看出内存有浪费,而我们将小的成员放一起可以节省资源 减少浪费。

上例可以改为:

 int i

char c

double d

这样总大小只需16 节省浪费。

 

空的结构体类型大小为1,创建对象需要开辟空间,开多了浪费,不开没法寻址,而内存的最小单位是一个字节,所以开1.

 

 

 

 

 

那么结构体为什么要对齐呢?

             wKiom1bSvJTDjDmLAAAew-aLvpA525.png

如图 红色方式读取b时需要读取两次

     绿色方式只需读取一次

     用内存来换取时间。