gpt4 book ai didi

arm - ARM ABI 和 EABI 的目的是什么?

转载 作者:行者123 更新时间:2023-12-03 08:11:20 25 4
gpt4 key购买 nike

我越看这个 PDF ( Application Binary Interface forthe ARM Architecture: The Base Standard ),我就越不明白它的意思。我还想对 Procedure Call Standard for the ARM Architecture 发表一些评论和 ELF for the ARM Architecture .

最佳答案

ABI ( Application Binary Interface ) 是一种标准,它定义了高级语言中的低级概念与特定硬件/操作系统平台的机器代码的能力之间的映射。这包括以下内容:

  • C/C++/Fortran/... 数据类型 如何在内存中布局(数据大小/对齐方式)
  • 嵌套的 函数调用 是如何工作的(关于如何返回函数调用者的信息存储在何处以及如何存储,在 CPU 寄存器和/或内存中传递参数的位置)
  • 程序启动/初始化 是如何工作的(“可执行文件”有什么数据格式,代码/数据是如何从那里加载的,DLL 是如何工作的......)

  • 这些问题的答案是:
  • 特定于语言的(因此你有一个 C ABI、C++ ABI、Fortran ABI、Pascal ABI,......甚至 Java 字节码规范,虽然针对“虚拟”处理器而不是真正的硬件,是一个 ABI),
  • 特定于操作系统(同一硬件上的 MS Windows 和 Linux 使用不同的 ABI),
  • 硬件/CPU 特定(ARM 和 x86 ABI 不同)。
  • 随(长)时间演变(现有的 ABI 经常被更新/修订,以便可以使用新的 CPU 功能,例如,指定应用程序如何使用 x86 SSE 寄存器当然是唯一可能的一旦 CPU 具有这些 reg,因此需要澄清现有的 ABI)。

  • 如果没有某种这种标准化,不同编译器创建的(机器)代码就不能使用相同类型的库(您怎么知道库代码期望以哪种方式传递函数参数或数据结构?)。

    每个平台(特定硬件、操作系统软件和以特定编程语言编写/使用特定编译器编译的代码的组合)都定义了一整套 ABI 以使事物具有互操作性。这方面的术语不清楚,有时人们只是谈论“ABI”,有时则称为“平台补充”,或者有人提到编程语言并说例如“C++ ABI”。请记住,没有这样的事情。

    您在问题中链接到的文档都是这方面的具体示例(语言/操作系统/特定于硬件的 ABI)。

    即使在特定平台上,也没有必要只有一个 ABI(集),因为不同的此类约定可能具有不同的优势(因此提供更好的性能/更小的代码/更好的内存使用率/... - 取决于程序)和系统设计者通常尝试灵活/允许。
    例如,在 32 位 Microsoft Windows 上,函数调用约定部分有大量 ABI(fastcall、stdcall、pascal 等)。

    无论如何,对“ABI”的通用 stackoverflow 搜索(包括“相关”侧栏下的链接)提供了很多研究这个问题的线索,我在这一点上关闭了我的答案。

    关于arm - ARM ABI 和 EABI 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8060174/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com