C调用约定的替代方案?好的资源?优点/缺点



我现在真的只熟悉C调用约定(如Nasm-C调用约定中所述)。这个源代码还描述了Pascal风格的调用约定。

我想了解各种函数调用约定(描述或来源)?此外,使用一个比另一个有什么优点或缺点(如果有的话)?

注意:最感兴趣的是x86平台,但欢迎您描述其他平台。

C调用约定的最大优点是:

  1. varargs的处理。使用C调用约定,调用者推到堆栈上并起飞——调用者知道他们传递了多少个参数,因为他们正在进行传递。否则,被调用者必须以某种方式解决它。当然,如果他们想使用varargs,他们无论如何都会这样做,但如果他们弄错了,为什么要给他们机会打碎堆栈呢?因此,清理了被调用者的语言往往不支持varargs
  2. 您的代码与C(以及大多数C++)链接兼容。你很少听说油嘴滑舌,是吗?我不这么认为

基于寄存器的调用也很有用,我认为许多C编译器这样做是为了优化,而不是将整数/指针推到堆栈上——当然,对于库中的外部可见函数来说不是这样!

公约的全部意义在于它们是传统的。遵守惯例是有意义的,因为这样其他遵守惯例的人就会知道会发生什么。所以说真的,不要想太多。在这种情况下,跟随人群会带来实实在在的好处。

最新更新