深入 C 语言和程序运行原理
于航
PayPal 技术专家
21121 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
深入 C 语言和程序运行原理
15
15
1.0x
00:00/00:00
登录|注册

30|ABI 与 API 究竟有什么区别?

SysV AMD64 ABI 调用约定
保障程序在不同平台上的兼容性
程序载入和动态链接细节
对象文件结构
进程初始化细节
数据类型大小与对齐方式
函数调用规范
侧重于机器指令层面的格式
描述应用程序与操作系统和硬件平台协作的规范
Web API POST https://docs.googleapis.com/v1/documents/{documentId}:batchUpdate
C 标准库函数 fopen
1968年术语在 AFIPS 会议论文中首次出现
40年代首次出现概念
Web 接口 (REST, SOAP)
C 标准库函数
维护独立性
参数个数与类型
接口名称
隐藏功能的内部实现细节
提供程序员通过编程语言调用的接口
使用 x86-64 汇编语言编写导致栈未对齐异常的程序
ABI 描述二进制层面的规范,确保跨平台兼容性
API 提供统一、稳定的编程接口,隐藏实现细节
例子
重要性
规范内容
定义
例子
历史
表现形式
特征
定义
思考题
总结
ABI (应用程序二进制接口)
API (应用程序编程接口)
API 与 ABI 的区别

该思维导图由 AI 生成,仅供参考

你好,我是于航。
今天我们来聊另外一个老生常谈的话题:“ ABI 与 API 这两个概念究竟有什么区别?”
也许你之前也思考过这个问题。ABI 与 API 这两个英文缩写只差一个字符,因此它们对应的概念在很多线下讨论和博客文章中会被经常混用,甚至是乱用。当然,时不时地,这个问题也会成为人们在技术社交圈内的丰富谈资。这一讲,就以你熟悉的 C 语言体系为例,我们来一起看看 ABI 与 API 二者分别指代什么内容,有什么区别。

API

API 的全称为“应用程序编程接口(Application Programming Interface)”。从它的名字我们就能看出来,这一类接口的侧重点在于“编程”。因此,通过遵循 API 规范,我们可以在相应的编程语言代码中使用这些接口,以操作计算机系统来完成某项特定任务。而对 C 语言来说,那些由 C 标准库提供的,被定义在不同头文件中的函数原型,便是一种 API 的具体表现形式。

重要特征

API 具有的一个最重要特征,便是隐藏了其背后具体功能的内部实现细节,公开对编码有意义的部分(如接口名称、可接收参数的个数与类型等)。通过保持这部分特征的一致性,API 提供者与调用者便可在相对隔离的环境下被独立维护。在这种情况下,这部分相对统一和稳定的特征也可被单独抽离出来,成为相应的 API 规范。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

ABI 和 API 是技术领域中常被混淆的概念。API(应用程序编程接口)侧重于编程,隐藏内部实现细节,使使用者可以独立维护和使用系统能力。而ABI(应用程序二进制接口)关注于机器指令层面的具体格式,规定了程序与操作系统、硬件平台之间的协作规则。本文通过C语言体系为例,详细解释了API和ABI的区别,并验证了不遵循ABI规则的程序是否能正常运行。API提供了功能同时隐藏实现细节,让使用者可以按照统一和稳定的方式使用系统能力;而ABI规定了程序与操作系统、硬件平台之间的协作规则,关注于机器指令层面的具体格式。文章通过清晰的例子和历史发展简史,帮助读者更好地理解了API和ABI的概念及其重要性。ABI规范通常包括函数调用规范、数据类型大小与对齐方式、进程初始化细节、对象文件基本结构、程序载入和动态链接的细节等内容。稳定的ABI对保障同一个程序在多个不同平台上的兼容性有着重要作用。C语言的特殊地位使得操作系统厂商选择使用它作为编写相应ABI规范的“基准语言”。文章通过深入解析API和ABI的区别,帮助读者更好地理解这两个概念之间的关系和重要性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入 C 语言和程序运行原理》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • Y
    API:规定了螺丝和螺丝母的规格 ABI:规定了制作螺丝的材料和制作细节 😂

    作者回复: 可以说是十分形象了!

    2022-03-07
    14
  • 连瑞龙
    原文中的汇编语言小伙伴们如果想实践,需要将 # 注释部分删掉或者改为 ; 注释。汇编不支持 # 注释。 ; main.asm extern sub global _start section .text _start: and rsp, 0xfffffffffffffff0 sub rsp, 1 mov esi, 2 ; the 1st param. mov edi, 1 ; the 2nd param. call sub mov edi, eax mov eax, 60 syscall
    2024-01-12归属地:北京
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部