x64架构下的调用约定

9
我在多个地方看到,Microsoft对于x64平台的调用约定被缩小到了一个:调用者清理堆栈(cdecl),参数通过堆栈和寄存器的组合传递(我这里不会详细解释)。我假设如果这是操作系统的调用约定,则可能所有针对Windows的其他编译器(例如mingw-w64)也遵循它。
这种调用约定是否也适用于其他主要平台(例如x64 Linux等)?或者Linux仍然使用多个调用约定,甚至只有一个但不同的调用约定?GCC或Clang是否允许在x64 Linux上使用多个调用约定?

10
那些美好的日子即将结束。微软正在增加“__vectorcall”调用约定,最多可以通过SSE2寄存器传递六个“__m128”值。 - Hans Passant
1个回答

13

我刚在这里这里找到了答案。基本上,Windows 以一种方式处理,而其他所有平台则以另一种方式处理,但每个平台只有一种处理方式(与使用x86的每个平台的多种处理方式相反)。


5
不偏向任何一方,但经历了那么多由 x86 调用约定引起的痛苦后,人们会认为达成一个标准在 x64 上应该是优先考虑的。 - Basic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接