我编译了两次相同的 C 源代码:
- Arch:x86,操作系统:Slackware 14(32 位),编译器:gcc 4.7.1(32 位)
- Arch:x86,操作系统:Windows XP(32位),编译器:gcc 4.4.1(32位)
阅读汇编程序列表,我注意到调用约定(System V i386 ABI 和 cdecl)似乎相同,除了名称装饰(在第一种情况下缺少尾随 _)和被调用者保存的寄存器(EDI、ESI、EBX 与 EAX、ECX、EDX )。
这是真的吗?
如果是这样,除了名称修饰之外,我们是否可以将 System V i386 ABI 视为 cdecl 的变体?
谢谢