结构体的内存分析:
结构体的对其:
在VS中默认的对齐数是8.
为什么要存在内存对齐呢:
总的来说:结构体内存对齐就是以空间换取时间的操作。
修改默认对齐数:
#pragram,这个预处理指令可以修改编译器的默认对齐数。
具体的内存结构体对齐:
假设内存空间如下:
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
结构体如下:
一个char 类型是一个字节。
一个int 类型是四个字节。
根据结构对齐法则,第一个char 在内存空间是0的位置,而int是四个字节,则内存空间必须是四的整数倍,所以说内存空间1,2,3就被空了出来,从第5个开始int占5,6,7,8四个字节,第二个char是9内存空间。最后结构体的总体所占的内存空间是编译器和最大结构体成员之中的最小值。
在VS中编译器默认的是8,而在这个结构体中,最大的类型成员是int类型,所以两者取最小值--4.
综上所述结构体的内存必须是4的倍数--也就是上图中11的位置,所以9,10,11的空间也就空出来了。综上一共占了12个字节的空间。
因此,结构体当书写结构体成员的时候,尽可能的将相同的成员写在一起,字节小的类型写在前面,来节约内存空间。