day7:API和ABI

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:13   2059   0

API和ABI的区别

ABI---Application Binary Interfac ,中文名称二进制应用用程序接口,通常我们把符号修饰标准、变量内存布局、函数调用方式等这些和二进制兼容性相关的内容称之为ABI。
API---Application Program Interface,中文名称应用程序编程接口,通常如此定义 操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令。
它们的不同体现在什么地方呢?
他们都是应用程序接口,但是他们所描述的接口所在的层面不一样。我们常说的API是源码级的,这个我们相对来说接触的多一些。而ABI是二进制层面的,它的兼容性比API更为严格。API更关注源码的部分, 比如printf函数,能够保证我们能移植的系统之间的函数定义都是一样的,但具体最终这两个函数在不同的系统中如何实现是不管的,这个函数在不同的系统中如何实现,这就涉及到二进制层面了,这就是说API相同并不能确保ABI相同。
影响ABI的因素有那些呢? 硬件、编程语言、编译器、连接器、操作系统等都会影响ABI。
就从C语言来说,影响二进制兼容的因素有:
1.内置类型大小和在存储器的放置方式
2.组合类型的存储方式和内存分布,所谓组合类型也就是Union,struct,数组等。
3.外部符号与用户定义的符号之间的命名方式和解析方式。
4.函数的调用方式等。
5堆栈的分布方式
6.寄存器的使用约定。
C++中,影响二进制兼容的因素有:
1.继承类体系的内存分布,如基类,虚基类在继承类中的位置。
2.指向成员函数的指针的内存分布,如何通过指向成员函数的指针来调用成员函数,如何传递this指针。
3.如何调用虚函数。
4.模板类的实例化。
5.外部符号的修饰。
6.全局对象的构造和析构
7.异常的产生和捕获
8内嵌函数的访问细节等问题。
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP