[算法题] 计算结构体的大小

计算结构体的大小

     C代码中定义的结构体是一块连续内存,各成员按照定义的顺序依次在其中存放。编译器在完成语法分析后,需要计算它的大小,然后才能正确地为结构体分配空间。为了让结构体的所有成员都能正确、快速地访问,需要字节对齐。

     字节对齐体现为:在成员之间可能增加补齐字节,以调整每个成员的偏移;结构体末尾,也可能增加补充字节。所有补齐字节计入结构体的大小。

     请写一个程序来计算结构体的大小,要考虑字节对齐,同时要支持结构体多层嵌套的情况。

 

结构体大小的计算

成员在结构体内的偏移必须是它的字节对齐值的倍数。

 
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.cnblogs.com/jingmoxukong/p/3393834.html,如需转载请自行联系原作者
上一篇:小白如何购买阿里云服务器(2020新版最详细教程)


下一篇:阿里云自营建站【云速成建站】会打字就能操作的网站