提问人:Nhat Nguyen 提问时间:11/8/2023 更新时间:11/8/2023 访问量:71
系统 V ABI 和 C++ Itanium ABI 之间的差异
Differences between System V ABI and C++ Itanium ABI
问:
谁能帮我澄清系统V ABI和C++ Itanium ABI之间的区别?
据我了解,System V ABI 设置了如何进行系统调用和与硬件交互的约定,而 C++ Itanium ABI 只是 C++ 程序与其他程序链接和通信的约定,它与系统调用或底层硬件无关。这听起来对吗?
答:
0赞
Jeff Garrett
11/8/2023
#1
ABI 指定数据布局、调用约定、程序结构、堆栈展开等...
SysV ABI 为 C 数据和函数定义了所有这些。它通过引用合并了用于 C++ 数据和函数的 Itanium C++ ABI。
评论
0赞
Nhat Nguyen
11/8/2023
您的意思是硬件实现了 System V ABI 以供 C 语言遵循吗?
0赞
Jeff Garrett
11/8/2023
更准确地说,System V ABI 定义了 C 程序应该如何使用硬件(它涵盖的不仅仅是硬件)。实现者是编译器和链接器。例如,它说在 x86-64 上返回 int 的 C 函数返回 %rax 中的值。C 编译器必须生成返回 %rax 值的程序集或机器代码。
0赞
Nhat Nguyen
11/9/2023
为什么 System V ABI 为 C 定义?我可以看到任何遵循 ABI 的编译语言都应该可以正常工作。
0赞
Jeff Garrett
11/11/2023
System V 定义了 C 结构应该如何工作。结构类型、整数类型等的参数传递。其他想要“遵循 ABI”的语言必须定义如何将其语言结构映射到 C 语言中的语言结构。例如,只有某些 C++ 类型的布局与 C 中的布局相同。因此,Itanium ABI 必须说明哪些类型像 C 一样布局,以及其余类型是如何布局的。Rust 的枚举类型在 C 中没有相应的概念,因此类似地,必须定义如何将它们映射到 C 才能使用 SysV abi。
0赞
Nhat Nguyen
11/13/2023
哦,在 C/C++ 中,返回值在 ran 中,是因为它们遵循系统 V ABI?其他编译语言编译器可以定义自己的规则,即使用哪个寄存器进行返回值,并且可以生成正确的汇编代码?
评论