我正在实现一个新功能,可能会导致沿递归调用的某个代码路径生成相当多的子程序。
因此,我必须将recursive
属性分配给这些子例程。
我的问题是:这如何影响这些子程序的计算时间?性能在该代码中非常重要,因此最好知道这可能产生的任何影响。
答案 0 :(得分:6)
"适当"答案是分析您的代码并进行测试。
根据经验,当代编译器中的递归关键字如何影响代码生成主要是关于大型本地数组。对于非递归过程,可以将它们放在静态数据部分(.data或.bss中,具体取决于平台的二进制格式),但这显然不适用于可能递归调用的过程。因此,在这种情况下,编译器必须在堆上创建那些分配和释放可能代价高昂的变量,或者在任何情况下只在堆栈上创建它们,并希望用户环境不会有非常小的堆栈大小限制。 / p>
另外,在即将推出的Fortran 2015标准草案中,递归程序已成为默认程序,并且有一个新的关键字" non_recursive"如果一个人明确想要一个不应该递归调用的过程。