我正在实现一项新功能,该功能可能会导致沿特定代码路径递归调用相当多的子例程。
因此我必须为这些子例程分配recursive
属性。
我的问题是:这如何影响这些子例程的计算时间?性能在该代码中非常重要,因此最好了解这可能产生的任何影响。
最佳答案
“正确”的答案是分析您的代码并进行测试。
根据经验,当代编译器中的递归关键字如何影响代码生成主要与大型本地数组有关。对于非递归过程,可以将它们放在静态数据部分(.data 或.bss,取决于平台的二进制格式),但这显然不适用于可能递归调用的过程。因此,在这种情况下,编译器必须在堆上创建这些变量,其中分配和释放的成本可能很高,或者无论如何都在堆栈上创建它们,并希望用户环境没有非常小的堆栈大小限制。
顺便说一句,在即将发布的 Fortran 2015 标准的草案中,递归过程已成为默认值,如果明确希望有一个不应递归调用的过程,则有一个新关键字“non_recursive”。
关于performance - 'recursive' 属性如何影响 FORTRAN90 子例程的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29744810/