java abi生成工具_ABI与编译器:ABI是由内核和工具链定义和实现的

http://book.51cto.com/art/201412/460857.htm

《Linux系统编程(第2版)》第1章入门和基本概念,这一章着眼于Linux系统编程的基础概念并从程序员视角探索Linux系统。本节为大家介绍ABI。

1.2.2  ABI

API定义了源码接口,而ABI定义了两个软件模块在特定体系结构上的二进制接口。它定义了应用内部如何交互,应用如何与内核交互,以及如何和库交互。API保证了源码兼容,而ABI保证了“二进制兼容(binary compatibility)”,确保对于同一个ABI,目标代码可以在任何系统上正常工作,而不需要重新编译。

ABI主要关注调用约定、字节序、寄存器使用、系统调用、链接、库的行为以及二进制目标格式。例如,调用约定定义了函数如何调用,参数如何传递,分别保留和使用哪些寄存器,调用方如何获取返回值。

尽管曾经在不同操作系统上为特定的体系结构定义一套唯一的ABI,做了很多努力,但是收效甚微。相反地,操作系统(包括Linux)往往会各自定义自己独立的ABI,这些ABI和体系结构紧密关联,绝大部分ABI表示了机器级概念,比如特定的寄存器或汇编指令。因此,在Linux,每个计算机体系结构都定义了自己的ABI。实际上,我们往往通过机器体系结构名称来称呼这些ABI,如Alpha或x86-64。因此,ABI是操作系统(如Linux)和体系结构(如x86-64)共同提供的功能。

系统编程需要有ABI意识,但通常没有必要记住它。ABI并没有提供显式接口,而是通过工具链(toolchain),如编译器、链接器等来实现。尽管如此,了解ABI可以帮助你写出更优化的代码,而如果你的工作就是编写汇编代码或开发工具链(也属于系统编程范畴),了解ABI就是必需的。

ABI是由内核和工具链定义和实现的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值