2019-12-28 17:49发布
takashiki 发表于 2017-5-15 14:23 对于M3来说: 1、M3没有ARM模式,只有Thumb2模式。
wye11083 发表于 2017-5-15 12:17 错也。对这类RISC内核,所有操作都是基于32位的——它里面根本没有16位/8位流水线单元!有符号数LD时做符 ...
gmyu 发表于 2017-5-15 17:30 不知道是不是编译器已经帮我们考虑了对齐和存取的问题。
最多设置5个标签!
1、M3没有ARM模式,只有Thumb2模式。
2、基本上,在对齐访问模式下,32b访问效率最高,但是LDR等指令相对于8b、16b来说是一样的,因为有专用的指令LDRB、LDRH之类。算数、逻辑运算等等只有32位的操作进行8b、16b运算需要额外的操作而降低效率,但是一般编译器优化之后降低得并不明显。在非对齐访问模式下,32位访问效率比较低,非对齐模式下8位访问效率是最高的,16b、32b需要额外的时钟周期来拼接。因此,__packed关键字是会降低效率的。
不知道是不是编译器已经帮我们考虑了对齐和存取的问题。
我所谓的多干的活是指令内部干的活,比如ldrb,其实内部是用ldr获得32位值,然后位屏蔽并选择对应位置的字节,这些操作确实是1个指令就可以完成的,很明显比ldr干的活多嘛
然后乘除运算,我特意去看了下cm3的指令集,乘法倒倒还好,基本上8、16、32位运算都是有对应指令的,但是除法就没有那么幸运了
不知道呢,我认为编译器应该会尽可能的考虑对齐问题,但是人为的折腾他就没办法了。比如指针强制转换 *(int*) 0x20000001这样的代码。
有时不要为了很少的效率,特定将char改成int. 反而可能降低可读性和维护性。
一周热门 更多>