后方格智能化观察网
首页 > 智能化方案 > ARM内存边界对齐以及sizeof问题

ARM内存边界对齐以及sizeof问题

默认情况下,在32位cpu里,gcc对于结构体的对齐方式是按照四个字节来对齐的。看以下结构体 char a; int b; short c; }pack; 对于Pack结构体,默认情况下在arm/386平台下(别的平台没试过)sizeof(pack)=12,求解过程如下: sizeof(char)=1; 下一个int b,由于是四个字节,要求b的开始地址从32的整数倍开始,故需要在a后面填充3个没用的字节,记为dump(3),sizeof(b)=4,此时相当于结构体扩充为 char a; char dump(3); int b; 看short c,现在c的前面有8个字节,c是两个字节,c的开始地址是从16的整数开始,在b前面不需再加东西.此时对于结构体来说,sizeof(pack)=10,但是这不是最终结果,最后总的字节数也要能被4个字节整除,所以还需在short c后面再加 dump(2); 故总的字节数为12. 当然以上说的只是简单的情况,下面谈谈arm,x86在gcc里关于内存边界字节对齐的区别.对于同样的结构体,在386下 #prama pack(1) 后,sizeof(pack)=1 4 2=7 而在arm下同样的操作sizeof(pack)=1 4 2 1=8,即虽然b根a之间不要填充但总的长度必须要是4的整数倍. 在arm 下要使结构体按指定字节对齐,可行的方法 1.在makefile里加-fpack-struct 选项,这样的话对所有的结构按一字节对齐. 不得不说,确实有那么些质量较差的程序可能需要你部分自然对齐,部分一字 节对齐,此时 可利用__attribute__属性 当然最后的方式,还是自己去看arm体系结构与gcc编译选项了。

标签:

猜你喜欢

智能化方案 交通智能网时代...
随着科技的飞速发展,尤其是人工智能(AI)、物联网(IoT)和大数据等新技术的应用,我们迎来了一个全新的交通时代——“交通智能网”。在这个网络化、智能化的...
智能化方案 实训报告心得体...
理解理论与实践相结合的重要性 在开始这次实训之前,我对理论知识有了深入的了解,但我意识到,仅仅停留在书本上是不够的。通过参与项目开发、系统维护等多种实际操...
智能化方案 智能轨道交通未...
一、智能轨道交通:未来城市的智慧之翼 二、智能化引领新时代 在这个信息爆炸的时代,科技的发展已经渗透到每一个角落。无论是日常生活中的小事,还是城市运输体系...
智能化方案 智能交通技术在...
智能交通技术在未来城市规划中的应用研究:基于大数据与人工智能的可持续交通系统优化 引言 随着全球人口的不断增长和城市化进程的加速,传统交通系统面临着前所未...

强力推荐