许久不见我考完试回来啦,让我们接着将结构体进行到底!
结构体的内存存储形式并不是按照普通形式的直线形式的存储,为了达到快速访问的效果,计算机在对结构体进行存储时会浪费掉一些内存空间来满足数据的对齐。
- 结构体数据储存位置从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个字节!!