在x64上调用约定

Bar*_*uch 7 compiler-construction 64-bit x86-64 calling-convention

我在几个地方看到微软对x64平台的调用约定缩小到只有一个:调用者清理stack(cdecl),参数是在堆栈和寄存器的组合中传递的(我不会在这里详细介绍).我假设如果这是操作系统的调用约定,那么可能所有其他针对Windows的编译器(例如mingw-w64)也会遵循它.

这个调用约定在其他主要平台(x64Linux等)上也是如此吗?或者Linux仍然使用多个调用约定,甚至只使用一个但不同的调用约定?在Linux 上执行GCCClang允许多个调用约定x64

Bar*_*uch 10

我刚刚找到了答案,在这里这里.基本上,Windows以一种方式实现,其他人以另一种方式实现,但每个平台只采用一种方式(与每个平台的多种方式相反x86)

  • 没有用手指指着任何一方,但是您会认为,在x86调用约定引起所有痛苦之后,就x64而言,就一个标准达成一致将是优先事项 (3认同)