我正在实现一项新功能,该功能可能导致沿某个代码路径递归调用许多子例程。
因此,我必须将recursive
属性分配给那些子例程。
我的问题是:这如何影响这些子例程的计算时间?性能在该代码中非常重要,因此最好知道它可能产生的任何影响。
最佳答案
正确的答案是分析您的代码并进行测试。
根据经验,现代编译器中的递归关键字如何影响代码生成,这主要与大型局部数组有关。对于非递归过程,可以将它们放在静态数据部分(.data或.bss,具体取决于平台的二进制格式),但这显然不适用于可能被递归调用的过程。因此,在那种情况下,编译器必须在堆上创建那些变量,这会增加分配和释放的成本,或者在任何情况下都只能在堆栈上创建它们,并希望用户环境的堆栈大小没有非常小的限制。
顺便说一句,在即将到来的Fortran 2015标准的草稿中,递归过程已成为默认设置,并且如果有人明确希望拥有不应递归调用的过程,则使用新的关键字“ non_recursive”。