许久不见我考完试回来啦,让我们接着将结构体进行到底!
目录
结构体对齐的意义:
结构体对齐的实现:
对齐规则:
训练:
好到这里误区来了:
总结:
往期回顾:
下期预告:结构体实现链表
结构体对齐的意义:
结构体的内存存储形式并不是按照普通形式的直线形式的存储,为了达到快速访问的效果,计算机在对结构体进行存储时会浪费掉一些内存空间来满足数据的对齐。
结构体对齐的实现:
对齐规则:
- 结构体数据储存位置从0开始,对之后的数据类型储存要进行对齐(对齐是以字节为单位)
- 成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
- 对齐数 ==编译器默认的⼀个对齐数与该成员变量所占内存(以字节为单位)大小的较小值(例如:int 类型的大小为4个字节,VS2022默认的对齐数是8,则int 的对齐数为 4)
- 结构体的总大小(不是序号)为最大对齐数的整数倍
训练:
知到了这些,就可以对结构体的内存大小进行计算了:
我们来计算两个练手:
struct { char a; short b; char c; }S1;
struct { char a; char b; short c; }S2;
S1 的计算方式:
好到这里误区来了:
注意:这里我们此时的内存大小为:5个字节,需要对齐为2的整数倍,所以最终对齐后内存为6个字节。
总结:
为了保险,计算时先画一个内存序号表,一个序号表示一个字节,从序号为0开始将数据放入。最后不要忘了总内存内存对齐。
那么S2的内存大小为多少就由你自己来计算吧!!
往期回顾:
结构体指针http://t.csdnimg.cn/FMfxa同时:
S2的内存大小为:4个字节!!