- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算你结构体长度(Calculate the length of your structure)
计算结构体长度: http: / / / motadou / article / details / 3521399
结构体对齐包括两个方面的内容
1. 结构体总长度
2. 结构体内各数据成员的内存对齐, 即该数据成员相对结构体的起始位置
结构体大小的计算方法和步骤
1. 将结构体内所有数据成员的长度值相加, 记为sum _ a;
2. 将各数据成员为了内存对齐, 按各自对齐模数而填充的字节数累加到和sum _ a上, 记为sum _ b.对齐模数是 # pragma pack指定的数值以及该数据成员自身长度中数值较小者.该数据相对起始位置应该是对齐模式的整数倍.
3. 将和sum _ b向结构体模数对齐, 该模数是 # pragma pac指定的数值和结构体内部最大的基本数据类型成员长度中数值较小者.结构体的长度应该是该模数的整数倍.
结构体大小计算举例
在计算之前, 我们首先需要明确的是各个数据成员的对齐模数, 对齐模数和数据成员本身的长度以及pragma pack编译参数有关, 其值是二者中最小数.如果程序没有明确指出, 就需要知道编译器默认的对齐模数值.下表是windows xp / dev c + + 和linux / gcc中基本数据类型的长度和默认对齐模数
char short int long double long double
windows 长度 1 2 4 4 8 12
模数 1 2 4 4 8 4
linux 长度 1 2 4 4 8 12
模数 1 2 4 4 4 4
例子1:
my _ struct struct
{
char a;
long double b;
};
此例子windows和linux计算方法一样, 如下:
步骤1: 所有数据成员自身长度和: 1b + 12b (13b, 13b _ a = sum
步骤2: 数据成员a放在相对偏移0处, 之前不需要填充字节; 数据成员b为了内存对齐, 根据 结构体大小的计算方法和步骤 中第二条原则, 其对齐模数是4, 之前需填充3个字节, sum _ b = sum _ a + 3 = 16 b
步骤3: 按照定义, 结构体对齐模数是结构体内部最大数据成员长度和pragma
pack中较小者, 前者为12后者为4, 所以结构体对齐模数是 4.sum _ b是4的4倍, 不需再次对齐.
综上3步, 可知结构体的长度是16b, 各数据成员在内存中的分布如图1所示.
例子2:
# pragma pack (2)
my _ struct struct
{
char a;
long double b;
};
# pragma pack ()
例子1和例子2不同之处在于例子2中使用了 # pragma pack (2) 编译参数, 它强制指定对齐模数是2.
此例子windows和linux计算方法一样, 如下:
步骤1: 所有数据成员自身长度和: 1b + 12b (13b, 13b _ a = sum
步骤2: 数据成员a放在相对偏移0处, 之前不需要填充字节; 数据成员b为了内存对齐,
According to the second calculation methods and steps structure in the size of the principles, the alignment modulus is 2, before filling 1 bytes, sum_b = sum_a + 1 = 14B
Step 3: according to the definition of the structure alignment module is inside the structure length and the largest data member pragma
Pack is smaller, the former is 12 and 2 for the latter, so the structure alignment modulus is 2. Sum_b is 7 times 2, without re alignment.
In the 3 step, the structure length is 14B, the distribution of each data member in the memory as shown in figure 2.
Example 3:
Struct my_struct
{
Char a;
Double b;
Char c;
};
The first two cases, data
您可能关注的文档
- 艾伯伦异世界设定(Abbylan's different world settings).doc
- 艾滋病,你了解多少(How much do you know about AIDS).doc
- 蚌埠cgm灌浆料(Bengbu CGM grouting material).doc
- 苯与溴的取代反应(Substitution reaction of benzene with bromine).doc
- 避风港原则、红旗理论与百度文库(Safe haven principle, red flag theory and Baidu Library).doc
- 避孕药遭遇三大疑问(The pill faces three major questions).doc
- 辨正字音(Correct pronunciation).doc
- 辩论赛要点及技巧运用(Debating points and skills).doc
- 表面处理工艺技术(Surface treatment technology).doc
- 表面活性剂对pvc增塑糊稳定性能的影响及机理探讨(Effect of surfactant on the stability of PVC paste and its mechanism).doc
- 2-红河州建筑施工安全生产标准化工地复核评分表(2022年修改版).docx
- 6.锡通项目2018年下半年工作会汇报材料(2018.7.9).docx
- 2018道路工程知识点汇总(新版).docx
- 附件3:月度生产例会安全汇报资料-站台门项目部.docx
- 附件2:广东建工集团2018年度科技成果汇总表.DOC
- 马武停车区、三汇停车区停车位管理系统,0#台账缺量.doc
- 攀成钢委办发〔2015〕19号(党风廉政建设责任考核与追究办法).doc
- 1-红河州建筑工程质量管理标准化复核评分表(2022年修改版).docx
- 中交第三公路工程局第四工程分公司项目经济合同结算管理办法(修订).doc
- 厂站安全操作规程汇编.doc
最近下载
- 设备安装调试及培训方案.docx VIP
- 2025届高考数学一轮复习备考建议课件——以“立体几何”为例.pptx
- 印刷-包装印刷培训资料.ppt
- 湖南省中小企业融资难的表现、原因以及对策.docx
- 安徽省芜湖市第二十七中学2024--2025学年上学期七年级入学测试数学卷(含答案).pdf VIP
- 年产250万吨薄板坯连铸连轧带钢生产线工艺设计剖析.docx
- 2022年新疆高考文科数学真题及答案.doc VIP
- 国家中小学智慧教育平台应用指南.pptx VIP
- 人教版七年级道法下册 第四单元第十一课 远离违法犯罪(上课、学习课件).pptx VIP
- 2024年N1叉车司机考试题及答案(1000题).doc
文档评论(0)