gpt4 book ai didi

assembly - 为什么有这么多不同的调用约定?

转载 作者:行者123 更新时间:2023-12-04 06:27:56 24 4
gpt4 key购买 nike

从历史上看,为什么似乎每个人和他们的弟弟都定义了自己的称呼习惯?你有 C、C++、Windows、Pascal、Fortran、Fastcall 以及可能还有无数其他我没想到的。对于绝大多数用例来说,一种约定不应该是最有效的吗?有什么好的理由更喜欢一个吗?

最佳答案

您提到的调用约定是在数十年来为不同语言和不同硬件设计的。他们都有不同的目标。 cdecl 支持 printf 的可变参数。 stdcall 导致更小的代码生成,但没有可变参数。 Fastcall 可以大大加快在旧机器上只有一两个参数的简单函数的性能(但今天很少有加速。)

请注意,当 x64 被引入时,至少在 Windows 上,它被设计为具有单一的调用约定。

Raymond Chen 在调用约定的历史上写了一个很棒的系列,您可以开始 here .

关于assembly - 为什么有这么多不同的调用约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3428332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com