ARMv8既包括32bit运行状态(execution state),又包括64bit运行状态。ARMv8可以对64bit宽的寄存器进行操作,但是也向后兼容ARMv7的软件(32bit的),也就是说ARMv7的软件(32bit的)可以在ARMv8上运行。
通常用“AArch64”来表示64bit运行状态,“AArch32”来表示32bit运行状态(几乎和ARMv7是一样的)。
因为ARMv8的很对概念,在ARMv7中都有,所以不是所有详细的概念都在这里包含了。对ARMv7架构的介绍,可以参考《ARM® Cortex®-A Series Programmer’s Guide》,有些概念可以到那份文档里去查看。
从ARM官方网站(Cortex-A – Arm Developer)查看ARM的Coretex A系列的处理器,大致可以有如下:
ARMv7 | ARMv8 | ARMv9 |
Cortex-A5 Cortex-A7 Cortex-A8 Cortex-A9 Cortex-A15 Cortex-A17 |
Cortex-A32 Cortex-A34 Cortex-A35 Cortex-A53 Cortex-A55 Cortex-A57 Cortex-A65 Cortex-A65AE Cortex-A72 Cortex-A73 Cortex-A75 Cortex-A76 Cortex-A76AE Cortex-A77 Cortex-A78 Cortex-A78AE Cortex-A78C |
Cortex-A510 Cortex-A710 |
为ARMv7系列处理器写的32bit的代码,也可以运行在ARMv8处理器上,但是会仅仅运行在ARMv8的32bit运行状态(AArch32)。64bit的指令,只能运行在ARMv8的处理器上,不能运行在ARMv7的处理器上。
从32bit升级到64bit的好处与不足:
1)A64指令集提供了一个更大的寄存器池(register pool),从而可以带来显著的性能提升。当在一个函数调用中,必须传送4个以上参数的时候,这些相比于之前的ARMv7多出来的寄存器就可以使之提高效率。因为ARMv7上,就需要使用堆栈,而AArch64运行状态下,可以最多传8个参数。
2)64位数据进行算数运算时的速度,会更高效。
3)64位的操作允许使用更大的虚拟内存空间,从原来的32bits(4GB)拓展到了40bits。这样所带来的好处是可以处理更大体积的文件,即使我们没有足够大的物理内存空间,可以通过虚拟内存对文件内容进行映射。
4)64bits的位宽带来的负面影响:
a、指针长度的增加会产生额外的内存空间消耗。
b、可访问内存空间的增加会导致cache的命中率降低,降低运行效率。
=========================================================================
注意:本文为本人原创,版权所属为个人所有,欢迎转载,但是转载请注明出处。
=========================================================================