1

我对所有这些术语感到困惑:

ABI、调用约定和硬件架构。

ABI 与架构链接:x86-64 与 i386 具有不同的 ABI。但是你也可以定义自己的调用约定 cdecl ...

那么所有这些概念之间的联系是什么?哪个定义了另一个?

大多数情况下,我认为我对 ABI 感到困惑。你在调用约定的一部分里面放了什么?

谢谢

4

1 回答 1

2

这是一个很大的话题,仍然给你一些指示:

ABI(应用程序二进制接口)涵盖了需要指定的细节,以便应用程序可以在某个系统(通常使用操作系统)上工作。所以,举个例子:

  • 数据类型大小(例如 C 标准只给出了类型的最低要求。int 类型至少应该和 short 一样大,而 short 必须是 16 位。)
  • 结构和位域的内存布局
  • 调用约定(当调用函数时,它可以找到它的参数,在寄存器中,在堆栈中等)
  • 堆栈帧(它存在于堆栈中,对调试器有用)
  • 系统调用号
  • 其他

基本上,为了构建与其他一些组件(库、操作系统)一起运行的程序而需要了解的任何细节都可以包含在 ABI 中。一些 ABI 指定了更多细节,而一些 ABI 指定了更少的细节。

硬件架构也可以看作是一种规范,但级别更低(它是关于硬件而不是软件)。硬件架构指定了可用的指令集、内存层次结构以及如何访问外围设备等内容。对于一种硬件架构,可以有不同的 ABI-s。您也可以为多个(但通常是相似的)硬件架构使用相同的 ABI。

于 2010-08-13T15:06:08.883 回答