stm32的变量定义,32b是不是效率更高?

2019-12-28 17:49发布

如题,如果工作再32位模式,是不是32位最好,8位或者16位在读取的时候还要增加移位和对齐操作。

Thumb模式呢?

懂编译器和熟悉ARM的出来说说,主要是M3,乘除法效率方面。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
wye11083
1楼-- · 2019-12-28 23:04
只要你地址是对齐的,访问8/16/32时间是一样的,计算时间也是一样的。。
sunnyqd
2楼-- · 2019-12-29 01:31
是的,32位运算效率最高
sunnyqd
3楼-- · 2019-12-29 02:10
wye11083 发表于 2017-5-15 11:50
只要你地址是对齐的,访问8/16/32时间是一样的,计算时间也是一样的。。

请不要误人子弟,在Cortex-M内核里,32位间的运算的效率最高,除非手写汇编采用8位或16位的SIMD运算
wye11083
4楼-- · 2019-12-29 07:18
 精彩回答 2  元偷偷看……
myxiaonia
5楼-- · 2019-12-29 07:34
wye11083 发表于 2017-5-15 11:50
只要你地址是对齐的,访问8/16/32时间是一样的,计算时间也是一样的。。

存取时间确实一样,但是8/16位内部干的活更多,尽管都可以在2个时钟完成

但是和乘除法相关的话,一般原生位数的数据会有对应的指令进行乘除,但是8/16位就未必有了

所有比较而言,还是用原生位数的数据类型会更好,而且这也是有依据的,比如c++预定义类型site_t就是原生位数的int
wye11083
6楼-- · 2019-12-29 11:06
myxiaonia 发表于 2017-5-15 12:08
存取时间确实一样,但是8/16位内部干的活更多,尽管都可以在2个时钟完成

但是和乘除法相关的话,一般原 ...

错也。对这类RISC内核,所有操作都是基于32位的——它里面根本没有16位/8位流水线单元!有符号数LD时做符号扩展,无符号数直接进,然后32位出来,
所以8b/16b并没有多干任何活,反而在一些场合要做&操作,多消耗一个周期。
什么是RISC?顾名思义,越简单越好。至于数据的组织等等,是编译器干的活。基本上优化得当的话,你8位进来,可以说在出来之前,都是32位数在做运算!

一周热门 更多>