博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
缔造程序兼容的契约(ABI)
阅读量:6616 次
发布时间:2019-06-25

本文共 1080 字,大约阅读时间需要 3 分钟。

缔造程序兼容的契约(ABI)

1. API是什么?

ABI(application binary interface),指的时应用程序二进制接口。

EABI(embeded application binary interface),指的是嵌入式应用程序二进制接口,和ABI的区别在于应用程序中允许使用特权指令。
ABI广义上的概率指的是应用程序在二进制层面的规范,狭义上指的是某个硬件/操作系统/虚拟机平台的规范文档。

2.ABI和 API的区别:

ABI是二进制层面的规范,而API是源码层面的规范。两者没有直接联系。

遵循相同ABI的系统,所提供的API可能不同:
相同的不同的系统如Windows和Linux都可以在电脑上安装,原因是遵循了相同的ABI规范,但是源代码是不同的,原因API不同。
遵循相同API的系统,所提供的ABI可能不同:
QT应用程序开发后(API相同,源代码),可以在Windows和Linux上运行,单经过编译后的可执行文件不同(编译时遵循的ABI不同)
Java跨平台原理:
编译之后的二进制文件相同,通过运行在不同平台上java虚拟机将其翻译成对应平台的可执行程序(翻译的规则是平台的ABI规范)。
缔造程序兼容的契约(ABI)
QT跨平台的原理:
相同的源代码(api),,通过在不同品台编译后成为各个品台的可执行程序(编译规范遵守了平台的ABI规范)。
缔造程序兼容的契约(ABI)

3. API有什么?

3.1 定义了基础数据类型的大小

缔造程序兼容的契约(ABI)

从这个角度考虑程序的可移植性,只需要将类型适配层做相应修改,使得数据类型满足平台规范即可。
缔造程序兼容的契约(ABI)

3.2 定义了共用体/结构体的对齐方式

如下面的程序,有两种对其方式,在Linux中使用的是压缩存储。

struct {    short s : 9;    int j : 9;    char c;    short t : 9;    short u : 9;    char d;} s;

Linux下输出结果:

缔造程序兼容的契约(ABI)
缔造程序兼容的契约(ABI)

3.3 定义了硬件寄存器的使用方式

寄存器时处理器用来处理数据的载体,一些寄存器在处理器设计时就规定好了功能。

缔造程序兼容的契约(ABI)
X86寄存器的ABI规范:
缔造程序兼容的契约(ABI)
Power PC寄存器的ABI规范
缔造程序兼容的契约(ABI)

3.4 定义了函数的调用时的约定

当函数调用时,参数会被传递给被调用的函数,而返回值会被返回给函数调用者。

调用约定描述参数如何传递到栈中以及栈的维护方式:参数的传递顺序(如从左向右入栈)、调用栈的清理(如被调函数负责清理栈)。
调用约定通常用于调用和库开发:
缔造程序兼容的契约(ABI)

转载于:https://blog.51cto.com/11134889/2092884

你可能感兴趣的文章
Exchange Server 2016管理系列课件25.管理安全通讯组
查看>>
计算机科学,大一学生怎样来爱你(文&PPT)
查看>>
linux中vmstat命令详解
查看>>
PHP 开发社区微信服务号实战图解
查看>>
Exchange Server 2013 系列八:邮箱服务器角色DAG实战
查看>>
php使用curl下载指定大小的文件
查看>>
VS2013创建Node.js C++ Addons的过程
查看>>
amaze ui中的icon button
查看>>
tcp 三次握手
查看>>
XML中添加换行符
查看>>
在C#中使用属性控件添加属性窗口
查看>>
printf()详解之终极无惑
查看>>
交叉检验---训练数据,验证数据和测试数据
查看>>
AspNetPager分页控件配置
查看>>
第 8 章 Spring Data
查看>>
[裴礼文数学分析中的典型问题与方法习题参考解答]5.1.24
查看>>
C语言 编程练习22题
查看>>
Log4Net 生成多个文件、文件名累加解决方法
查看>>
oracle 包,函数,过程,块的创建和执行及在java中执行(转)
查看>>
CloudDBA现场助力双十一
查看>>