我最近读了几个声明为static
的递归函数。
在函数声明前添加static
是否有助于GCC 优化尾递归函数?这是获得优化所必需的吗?
最佳答案
我看不出有任何理由可以让static
函数特别有助于编译器优化递归调用。
马上,您所看到的递归函数听起来更有可能只是编译单元内部的。递归函数经常需要一个比想要向程序的其余部分公开的接口(interface)更丰富的接口(interface)——例如,可能有额外的参数仅供递归调用使用,或者来自的返回值可能需要调整一般调用,以适应想要呈现给其余代码的抽象。因此,通常编写一个包装函数来为额外参数设置默认值,并通常将递归函数的接口(interface)调整为对外部有意义的好东西。
既然递归函数只被它自己和包装函数调用,那么声明它是很自然的 static
-- 不是因为递归本身,而是为了防止污染全局命名空间用它。编译器也有可能对静态函数使用更有效的调用约定(适应特定的函数体),因为它知道所有的调用点并且不必遵循让单独编译的代码调用它的 ABI。
关于c - GCC 的递归和 `static` 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13111091/