
计算结构体的大小
第一个成员函数b的自身对齐值是1如何计算结构体大小,比选定以及默认指 定对齐值4大,所以其有效对齐值为1,所以其存放地址0x0000符合0x0000%1=0.第二个成员函数a,其自身对齐值为4,所以有效对齐值也为 4,所以只能存放在起始地址为0x0004到0x0007这四个连续的字节空间中如何计算结构体大小,复核0x0004%4=0,且紧靠第一个变量但在放置结构对象的各个成员时,在某些编译环境上,可能会需要字对齐或双字对齐以及是别的哪些对齐,需要在相邻两个成员之间加若干个”填充字节”,这就造成各个成员之间可能会有若干个字节的空隙1,起始地址0x000c满足0x000c % 1 == 0结构体还必须整体对齐,也就是结构体成员最大有效对齐的倍数,0x000d不满足 % 4 ==0, 需要需要补充3个字节,总字节数为16对于b:int a自身对齐是4,pragma pack指定对齐也是4,因此其有效对齐为4,起始地址0x0000满足0x0000 % 4 == 0short b自身对齐是2,指定对齐是4,因此有效对齐为其最小值
字节对齐体现为:在成员之间也许增加弥补字节,以调整每个成员的偏差;结构体末尾,也或许减少补充字节。所有补齐字节计入结构体的大小。
请写一个程序来推导结构体的大小,要考量字节对齐,同时要支持结构体多层嵌套的情况。
结构体大小的计算
成员在结构体内的偏移必须是它的字节对齐值的倍数。

l字节对齐值:
1)基本类别char、short、int、double的字节对齐值依次为1、2、4、8。
2)数组的字符对齐值等于它的一个元素的字节对齐值。
3)结构体的字节对齐值等于它的所有成员的字节对齐值的最大值。
2大小的计算:
1)基本类别char、short、int、double的大小依次为1、2、4、8字节。

2)数组的大小等于它的一个元素的大小乘以元素个数。
3)结构体的大小应补齐到它自己的字节对齐值的倍数,补齐字节在末尾。
要求
实现以下接口:
1.开始结构体定义
2.添加基本类型成员

3.添加数组成员
4.添加嵌套结构体成员
5.结束嵌套结构体成员
6.完成结构体定义,输出它的大小
调用者会保证:
1.结构体的开始跟结束是匹配的。

2.不需要考虑空的结构体。
3.数组只限于一维的基本类别的变量。
4.最多20层嵌套(嵌套的情况参考实例)
StructSize.h
View Code
StructSize.cpp
View Code
main.cpp
View Code
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-133366-1.html
这次只好派大家伙来了
在几个小时的交锋中就采取撞击等升级事态的行动