代码之家  ›  专栏  ›  技术社区  ›  mathk

与ABI调用约定和arch混淆

  •  1
  • mathk  · 技术社区  · 14 年前

    我被这些术语弄糊涂了:

    ABI与体系结构相连:x86-64的ABI与i386不同。 但是你也可以定义你自己的呼叫约定cdecl。。。

    哪一个定义了另一个?

    谢谢

    1 回复  |  直到 14 年前
        1
  •  2
  •   vladmihaisima    14 年前

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

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

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