标签:调用约定

共 1 篇文章

Call convention & Name mangling

标题只是为了满足强迫症,文中对于 Call convention 还是使用中文翻译的调用约定,但 Name mangling 因为不知道怎么翻译好,就保持吧。

之前同学在聊面试的时候提到被问过调用约定(Call convention)相关的问题,突然想起来自己虽然知道这个东西影响的是方法调用(比如参数如何传递、调用栈清理等),但是并不记得每个类型的调用约定存在的作用以及具体内容,于是查了一下。

调用约定(Call convention)

调用约定规定了一个方法在被调用的时候需要遵循的一些内容:

  1. 参数如何传递,包括使用寄存器还是堆栈或是混合、从左到右压栈还是从右到左压栈。
  2. 调用栈最终由谁负责恢复?调用者(Caller)或被调用者(Callee)。
  3. 方法最终在链接时使用的符号名。
  4. 更多...

显然,调用约定是 ABI(Application binary interface) 层面的东西,而且这玩意有很多类型,历史原因在于以前提供机器的那波厂商没有顺带提供操作系统和编译器,而是把这两块交给了市场,于是各家自己玩自己的,弄出来各种自己的标准,所以 ABI 兼容就别想了。虽然也有如 ...

阅读全文