编译器在不同平台上实现C内联函数时有什么区别吗?

时间:2014-04-23 23:58:36

标签: c compiler-construction

有人告诉我,不同平台(例如Mips vs x86)中C内联函数的实现有点不同。例如,其中一个(Mips或x86)的内联函数仍然分配堆栈,因此效率不高。这是真的吗?有什么区别?感谢

1 个答案:

答案 0 :(得分:2)

当您将其声明为内联时,不保证每个函数都会被内联(这只是对编译器的建议)。因此,对于任何架构,未被内联的功能将被视为正常功能,因此推送&当你调用它们时从堆栈弹出(就像任何普通的非内联函数一样)

它几乎取决于编译器的配置方式。例如,GCC有以下标志:

<强> -finline函数
考虑所有内联函数,即使它们未以内联方式声明。编译器启发式地决定哪些函数以这种方式值得集成。

<强> -finline限值= N
默认情况下,GCC限制可以内联的函数的大小。该标志允许粗略控制此限制。 n是可以用伪指令数内联的函数的大小。

- 参数名称=值
在某些地方,GCC使用各种常量来控制完成的优化量。例如,GCC不会内联包含超过一定数量的指令的函数。您可以使用--param选项在命令行上控制其中一些常量。