ARM内存边界对齐的结构体

2019-08-16 14:12:16 来源:eefocus
标签:
CPU   程序   ARM

默认情况下,在32位cpu里,gcc对于结构体的对齐方式是按照四个字节来对齐的。看以下结构体

  

typedef struct pack{

  

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,但是这不是最终结果, http://tiyubisai.com/video_news/news_135587.html 最后总的字节数也要能被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 选项,这样的话对所有的结构按一字节对齐.

  

不得不说,确实有那么些质量较差的程序可能需要你部分自然对齐,部分一字 节对齐,此时

  

2. typedef struct pack{

  

}__attribute__((packed))

  

可利用__attribute__属性

  

当然最后的方式,还是自己去看arm体系结构与gcc编译选项了。

 
关注与非网微信 ( ee-focus )
限量版产业观察、行业动态、技术大餐每日推荐
享受快时代的精品慢阅读
 

 

继续阅读
重新定义娱乐、工作,十代酷睿笔记本为何从量变到质变?
重新定义娱乐、工作,十代酷睿笔记本为何从量变到质变?

21世纪的头二十年马上就要过去了,回过头看我们都体验到了科技迅猛发展带来的好处,以前不敢想的许多东西都变成了现实,如果对比下2000年发布的笔记本,再看一下2019年的笔记本,大家肯定会大吃一惊——差距实在是太大了。

英特尔收购 Barefoot 的背后,一家初创公司都这么牛?
英特尔收购 Barefoot 的背后,一家初创公司都这么牛?

今年6月,英特尔宣布收购一家名为“Barefoot”的公司,旨在帮助英特尔的数据中心部门“更好的应对云数据中心客户的不断变化的各类需求”。

嵌入式系统基本核心不能忘,ARM 是如何构架的?
嵌入式系统基本核心不能忘,ARM 是如何构架的?

目前在嵌入式开发的过程中,开发者往往把大量精力投入到嵌入式微处理器MPU(Micro Processing Unit)与众多外设的连接方式以及应用代码的开发之中,而忽视了对嵌入式系统最基本、最核心部分的研究。

DRAM 要求不断提高,长鑫存储谈 10nm 愿景

与非网9月20日讯,9月19日在深圳举办的中国闪存技术峰会上,长鑫存储副总裁、未来技术评估实验室负责人平尔萱博士进行了《DRAM技术趋势与行业应用》的演讲。

龙芯的血骨担当:国产芯再难也要做

与非网9月20日讯,据专业机构预测,今年中国芯片进口量将突破2,000亿美元(约12,185亿元人民币),远超一年石油进口的金额。作为全国芯片需求最为强劲、消耗份额居全国近七成的珠三角,却无一家先进的芯片制造厂。

更多资讯
英特尔的7纳米处理器可能还要再等3年
英特尔的7纳米处理器可能还要再等3年

与非网9月23日讯,英特尔10纳米和14纳米产品双线布局似乎还要再持续一段时间,在一份汇总资料中显示,今年除了酷睿i9-9900KS以及Cascade Lake-X旗舰级产品外,英特尔处理器今年的产品更新基本完成。

AMD 处理器市场崛起之路回顾:三张图表说明一切

与非网9月23日讯,AMD再处理器市场上崛起是有目共睹的,reddit用户ingebor(他已经汇编了我们迄今为止涵盖的所有Mindfactory数据)已经绘制了销售数据。过去五年来,令人难以置信地概述了AMD自2017年以来的崛起。

vivo执行副总裁胡柏山:vivo并没有自研芯片,年底将推出与三星合作研发的5G芯片
vivo执行副总裁胡柏山:vivo并没有自研芯片,年底将推出与三星合作研发的5G芯片

与非网9月23日讯,此前vivo要自研芯片,挖人挖到展锐门口的新闻闹得沸沸扬扬,然而近期vivo执行副总裁胡柏山接受采访时表示,这都是乌龙。

麒麟 990 与麒麟 990 5G 完全不同?消费者们都被华为欺骗了?

与非网9月23日讯,华为在德国柏林正式发布新一代旗舰芯片麒麟990系列,不同于以往本次新品包含了麒麟9905G和麒麟990两款芯片。很多小伙伴看到都是麒麟990处理器容易误认为它们是一款,其实这两款处理器不仅仅是差一个5G那么简单。来看看国内知名手机跑分软件安兔兔是怎么评价它们的:

未上市就遭哄抢,台积电 5nm 真香

与非网9月23日讯,据媒体报道,台积电7nm制程订单目前满载,市场供不应求,甚至会延期交货。包括16nm、12nm等相对较落后制程,也出现满载,真可谓数钱数到手抽筋。