打印
[牛人杂谈]

ARM编程的结构体对齐

[复制链接]
1218|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
之前一直不懂什么是对齐,,,现在明白了,分享来
结构体是由基本数据类型构成,并用一个标识符来命名的变量的集合,要先定义后使用。ARM 系统开发中使用结构体要考虑怎样最佳地控制存储器布局(即结构成员地址边界的对齐问题)。假设系统采用大端模式的存储器,下面的例子分析了如何优化结构体在映像文件中数据布局的问题。

沙发
xuanhuanzi|  楼主 | 2018-3-18 08:59 | 只看该作者


那么大家看明白这个图了吗,就是先把占据最大行的找出来,放上去,然后前后按顺序放,如果可以排列的下,就排列到一行,如果不够,那么后面就空白浪费掉了。
此外,关键词__packed 可以使数据1 字节对齐,不会插入任何填充位来实现字节对齐,但会破坏数
据的对齐,故节省空间的同时牺牲了效率,不提倡使用。

使用特权

评论回复
板凳
huangcunxiake| | 2018-3-18 18:30 | 只看该作者
有道理,这么做,可以让代码更加紧凑。方便使用结构体和联合等。

使用特权

评论回复
地板
xinpian101| | 2018-3-19 13:15 | 只看该作者
这个图,我看了半天终于看懂了,原来如此,,,这个在内存中的存储顺序,是编译器做的,还是硬件本身决定的。

使用特权

评论回复
5
xinpian101| | 2018-3-19 13:15 | 只看该作者
如果是编译器做的,编译器绝对可以自动修正这个排列顺序啊。

使用特权

评论回复
6
ayb_ice| | 2018-3-19 16:28 | 只看该作者
这是编译器完成的

使用特权

评论回复
7
598330983| | 2018-3-20 22:53 | 只看该作者
编译器不给你自动校正是因为你可能要用到指针操作这些顺序,如果顺序乱了,到时候你指针就操作跟你想要的不同。

使用特权

评论回复
8
ayb_ice| | 2018-3-21 10:42 | 只看该作者
xinpian101 发表于 2018-3-19 13:15
如果是编译器做的,编译器绝对可以自动修正这个排列顺序啊。

编译器不会去改变顺序,也不能改变

使用特权

评论回复
9
小灵通2018| | 2018-3-21 11:52 | 只看该作者
我也觉得编译器不应该改变这个顺序,一单改变还真是那样,如果用指针操作,那就找不到原来位置的数据了。

使用特权

评论回复
10
天灵灵地灵灵| | 2018-3-21 16:55 | 只看该作者
这个讲的透彻。

使用特权

评论回复
11
玛尼玛尼哄| | 2018-3-21 17:30 | 只看该作者
确实很有用。

使用特权

评论回复
12
telesoft| | 2018-4-9 12:46 | 只看该作者
INT有4BYTE,高BYTE在前还是在后?

使用特权

评论回复
13
xuanhuanzi|  楼主 | 2018-4-11 20:55 | 只看该作者
telesoft 发表于 2018-4-9 12:46
INT有4BYTE,高BYTE在前还是在后?

可以写个测试一下啊,通过位操作,看看到底在那额

使用特权

评论回复
14
zhuotuzi| | 2018-4-12 17:02 | 只看该作者
这种考虑当然好,不过如果你是内存容量相对充足,不必吧。

使用特权

评论回复
15
dongliushui| | 2018-4-14 10:46 | 只看该作者
这就在使用变量上做好规划了。

使用特权

评论回复
16
wahahaheihei| | 2018-4-15 18:05 | 只看该作者
这样看确实好啊,强迫症有救了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

155

主题

2084

帖子

2

粉丝