是真的FASTCALL快?
-
25-09-2019 - |
题
时的快速调用调用约定确实比其他调用约定,如CDECL更快? 是否有任何的基准,在那里,如何显示性能是通过调用约定影响?
解决方案
它取决于平台。对于氙气的PowerPC,例如,它可以是幅度差的顺序由于负载命中-Store问题与通过在堆栈上的数据。我凭经验定时一个cdecl
函数的开销在相比〜4所述的fastcall
约45个循环。
有关外的顺序在x86(Intel和AMD),的影响可能要少得多,因为寄存器都阴影和更名反正。
答案真的是,你需要对它进行基准测试自己,你所关心的特定平台上。
其他提示
时的快速调用调用约定真快于其他调用约定,如CDECL?
相信在x86即微软的实施fastcall
的和x64涉及在寄存器通过第一两个参数,而不是在堆栈上。
由于它通常保存至少四个存储器存取,是它通常更快。然而,如果所涉及的功能是寄存器饥饿,并因此有可能它们写入当地人在堆栈上了,有没有可能是一个显著增加。
调用约定(至少在x86上)并没有真正多大的速度差的。在Windows中,_stdcall
被任命为默认值,因为它产生的,它通常是在较小的代码大小结果时,与_cdecl
比较平凡的程序实效。因为它使不同的是远不如有形_fastcall
不是默认值。你做了什么在你通过在低效率的函数体失去寄存器传递参数(如之前提到佚名)。如果调用的函数需要立即泼洒东西展现出来到内存中以便自己的算盘你不通过传递寄存器获得任何东西。
不过,我们可以整天喷出理论观点 - 基准代码为正确答案。 _fastcall
会在某些情况下更快,而在其他慢。
在基于x86的 - 没有。 L1高速缓存之间和在衬有用于快速调用的地方。
不隶属于 StackOverflow