ABI和CPU体系结构类型有什么区别?

时间:2019-03-17 10:39:18

标签: android cpu-architecture abi

混淆了ABI和CPU架构类型,通过谷歌搜索我可以找到此链接

https://developer.android.com/ndk/guides/android_mk#target_arch_abi

据我了解,ABI是可以支持(或映射到)多种CPU指令类型的接口。我们所说的CPU体系结构类型x86,arm32,arm64类型是CPU类别,而ABI是Android提供给我们与这些CPU类型进行交互的接口。如果我错了,请纠正我。

为什么主要需要此接口?是否可以将相同的c / c ++代码编译为不同的体系结构类型?

1 个答案:

答案 0 :(得分:1)

ABI标准化了如何使用CPU资源以及如何将编程语言类型映射到未类型化的CPU指令和内存布局。
例如,ABI指定在函数调用或C ++对象布局期间如何使用寄存器。
CPU的ISA为程序员提供了很大的自由度,ABI是类似于API约定的低级约定。

由于ABI与CPU体系结构相关,因此不同的CPU不能具有相同的ABI。但是,术语ABI并不是绝对定义的:ABI是一种规范,完全有可能编写通用的规范。
其中一个示例是Itanium C++ ABI,它以少量的附录被重用,作为其他体系结构中C ++ ABI的基础。

最后,由于给定CPU体系结构没有单一的约定选择,因此每个人都可以针对该体系结构编写和提出其ABI。
一个CPU具有多个ABI的情况并不少见,但是这种自由度是由编译OS和/或系统库的人员保留的。
最终用户必须遵守OS / Library设置的ABI,否则其二进制文件不会使用与系统其余部分相同的底层语言。