标签: compiler-construction 64-bit x86-64 calling-convention
我在几个地方看到,x64平台的Microsoft调用约定被缩小到只有一个:调用者清理堆栈(cdecl),参数以堆栈和寄存器的组合传递(I我不会在这里详细说明)。我假设如果这是操作系统的调用约定,那么可能所有其他针对Windows的编译器(例如mingw-w64)也会遵循它。
x64
cdecl
这个调用约定在其他主要平台(x64 Linux等)上也是如此吗?或者Linux仍然使用多个调用约定,甚至只使用一个但不同的调用约定? GCC或Clang是否允许x64 Linux上的多个调用约定?
GCC
Clang
答案 0 :(得分:10)
我刚刚找到答案here和here。基本上,Windows以一种方式实现,其他人以另一种方式实现,但每个平台只采用一种方式(与使用x86的每个平台的多种方式相反)
x86