【发布时间】:2011-01-21 15:31:26
【问题描述】:
函数参数放置在堆栈上,但编译器可以通过使用可选寄存器来优化此任务。如果只有 1-2 个参数,而不是有 256 个参数时,这种优化就会启动是有道理的(并不是说希望有最大数量的参数)。
如何找出某个编译器(例如 gcc)的参数限制(参数数量),在哪里可以确定会使用这种优化?
【问题讨论】:
-
函数参数是否入栈(如果有,是哪些)取决于平台。对于除 32 位 x86 之外的所有其他内容,它始终是“寄存器中的一些参数”——只有(现在很古老)x86 传统会将它们放在堆栈中。
-
你为什么想知道这个?
-
参数传递不是编译器优化“选择”。如何传递参数取决于代码的互操作性需求。查看 stackoverflow 中的“调用约定”和/或“ABI”。在同一平台上存在多个这样的调用约定(
__cdecl、__fastcall、__stdcall和所有这些)在很大程度上是 x86/DOS/Windows 特定的事情。 -
@FrankH 感谢您为我指明了正确的方向,这正是我所需要的。将评论作为答案发布:)
-
不是赏金猎人,我读这个网站是为了好玩 ;-)
标签: c++ c function optimization cpu-registers