调用约定有何不同?

Eun*_*hoi 1 c++ assembly abi calling-convention

据我所知,调用约定取决于平台是Windows还是Linux。

我想知道,

  1. 编译器使调用约定不同。
  2. 平台使调用约定有所不同。

哪一个是真的?如果只有 2 为真,则调用约定是由平台定义的,编译器是否只遵循定义的约定?

Chr*_*odd 5

平台通常定义一种或多种“标准”调用约定。如果编译器想要使用这些约定与平台上的其他工具或组件进行互操作,但可以在内部使用自己的不同调用约定,则需要遵循这些约定。

唯一真正的要求是任何调用者和被调用者都需要就他们之间的调用约定达成一致。

  • 调用约定是 ABI 的一部分 - 您可能有两个不同的 ABI,它们具有相同或相似的调用约定,但根据定义,如果 ABI 相同,则调用约定将相同。 (2认同)