- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
ARM的字对齐问题总结
1.数据类型自身的对齐值:对于char型数据,其自身对齐值为1字节,对于short型为2字节,对于int,float,double类型,其自身对齐值为4字节。
2.结构体的自身对齐值:其成员中自身对齐值最大的那个值。
3.指定对齐值:#pragmapack(n)来设定变量以n字节对齐方式。n字节对齐就是说变量存放的起始地址的偏移量有两种情况,第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,第二、如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。
4.数据成员和结构体的有效对齐值:数据成员(数据类型)和数据结构的自身对齐值和指定对齐值中小的那个值,数据成员对齐了数据结构自然也就对齐了。
了解上述四个基本概念,我们开始讨论具体数据结构的成员和其自身的对齐方式。有效对齐值N是最终用来决定数据存放地址方式的值。有效对齐N,就是表示“对齐在N上”,也就是说该数据的存放起始地址%N=0。而数据结构中的数据变量都是按定义的先后顺序来排放的。第一个数据变量的起始地址就是数据结构的起始地址。结构体的成员变量要对齐排放,结构体本身也要根据自身的有效对齐值圆整(结构体成员变量占用总长度需要是对结构体有效对齐值的整数倍)。下面结合VS2005中编译环境的例子进行深入了解:
例子B分析:
structB
{
charb;
inta;
shortc;
};
假设B从地址空间0x0000开始排放。该例中没有显式指定对齐值N,VS2005默认值为4。
成员变量b自身对齐值是1,比指定或默认指定对齐值4小,故有效对齐值为1,其存放地址0x0000符合0x0000%1=0,满足字节对齐原则。
成员变量a自身对齐值为4,和指定或默认指定对齐值4相等,故有效对齐值也为4,为了保证字节对齐,成员变量a只能存放在起始地址为0x0004到0x0007这四个连续的字节空间中,复核0x0004%4=0。
成员变量c自身对齐值为2,比指定或默认指定对齐值4小,故有效对齐值为2,可顺序存放在0x0008至0x0009两个字节空间中,符合0x0008%2=0。
至此满足了数据成员的字节对齐,接着看数据结构B的对齐。数据结构B的自身对齐值为其变量中最大对齐值(也就是成员变量b)4,故结构体B的有效对齐值也是4。根据结构体圆整的要求,0x0009到0x0000=10字节,(10+2)%4=0。所以0x0000A到0x000B也为结构体B所占用。故B从0x0000到0x000B共有12个字节,sizeof(structB)=12。
之所以在变量C补充2字节,是因为要实现编译器快速有效的存取结构数组,试想如果定义B结构数组,第一个结构起始地址是0没有问题,但是第二个结构呢?按照数组的定义,数组中所有元素都是紧挨着的,如果不把结构的大小补充为对齐值(4)的整数倍,那下一个结构的起始地址将是0x0000A,这显然不能满足结构的地址对齐了。
例子C分析:
/*指定按2字节对齐*/
__align(2)structC
{
charb;
inta;
shortc;
};/*取消指定对齐,恢复缺省对齐*/
同理,例子C中成员变量b自身对齐值为1,指定对齐值为2,故效对齐值为1,假设C从0x0000开始,那么b存放在0x0000,符合0x0000%1=0,满足字节对齐原则。
成员变量a自身对齐值为4,指定对齐值为2,故有效对齐值为2,顺序存放在0x0002、0x0003、0x0004、0x0005四个连续字节中,符合0x0002%2=0,满足字节对齐原则。
成员变量c的自身对齐值为2,与指定对齐值相等,故有效对齐值为2,顺序存放在0x0006、0x0007中,符合0x0006%2=0,满足字节对齐原则。
从0x0000到0x00007共八字节存放的是结构体C的变量。结构体C自身对齐值为4,比指定对齐值2大,故C的有效对齐值为2,因8%2=0,C只占用0x0000到0x0007的八个字节。所以sizeof(structC)=8,完全满足字节对齐原则。
除了指定的对齐值不同能导致数据结构的地址存放不同外,编译器不同存放结构体方式也可能不同。
四、ARM平台的对齐问题
在ARM中,有ARM和Thumb两种指令。
ARM指令:每执行一条指令,PC的值加4个字节(32bits).一次访问4字节内容,该字节的起始地址必须是4字节对齐的位置上,即地址的低两位为bits[0b00],也就是说地址必须是4的倍数。
Thumb指令:每执行一条指令,PC的值加2个字节(16bits).).一次访问2字节内容,该字节的起始地址必须是2字节对齐的位置
您可能关注的文档
- 《观察物体(三)》教材分析.doc
- 《观察物体(一)》教案4.doc
- 《观察物体》公开课教学设计.doc
- 《观察物体》课堂实录.doc
- 《观察鱼》教学设计.docx
- 《观察植物细胞的质壁分离和复原》教学设计.doc
- 《观潮》教学设计-(人教版四年级上册).doc
- 《观潮》优秀教案.doc
- 《观书有感》-教学设计.doc
- 《观刈麦》教学设计(同名5783).doc
- 计及电动汽车移动储能动态电价的微电网优化调度研究及解决方案.pdf
- 浅谈电动汽车充电桩绝缘智能化自检装置的设计与应用 .pdf
- 浅谈电动汽车公共充电桩布局方案评价方法.pdf
- 浅谈基于弹性响应的电动汽车快充电价定价策略 汽车充电桩有序充电.pdf
- 浅谈光储充一体化社区的有序充电策略及解决方案.pdf
- 晚期肾透明细胞癌系统性治疗中国专家共识(2024版).pptx
- 中国膀胱癌保膀胱治疗多学科诊治协作共识(2022版).pptx
- 成人心血管外科手术体外循环患者血液管理指南.pptx
- 下尿路修复重建移植物应用规范中国专家共识.pptx
- 中国儿童急性非静脉曲张性上消化道出血诊治指南(2024).pptx
最近下载
- 全国血吸虫病监测方案2011年修订版-中国疾病预防控制中心.DOC
- 部编版语文四年级上册第2单元习作《我的家人》教学课件.pptx VIP
- 锅炉与汽轮机用钢及事故分析.pptx VIP
- 小学生好习惯养成主题班会省公开课金奖全国赛课一等奖微课获奖PPT课件.pptx
- langendorff心脏离体灌流.docx VIP
- 2023年月嫂从业资格证培训考试题(附含答案).pdf
- 中国思想史马工程全套完整教学课件.pptx
- 中国视疲劳诊疗专家共识(2024年).pptx
- (正式版)D-L∕T 317-2010 继电保护设备标准化设计规范.docx VIP
- 新概念二册lesson1-12测试题(完整版).pdf
文档评论(0)