"递归"属性如何影响FORTRAN90子例程的性能

fpn*_*ick 2 recursion performance fortran

我正在实现一个新功能,可能导致沿着某个代码路径递归调用的很多子程序.

因此,我必须将recursive属性分配给这些子例程.

我的问题是:这如何影响这些子程序的计算时间?性能在该代码中非常重要,因此最好知道这可能产生的任何影响.

jan*_*neb 6

"正确"的答案是分析您的代码并进行测试.

根据经验,当代编译器中的递归关键字如何影响代码生成主要是关于大型本地数组.对于非递归过程,可以将它们放在静态数据部分(.data或.bss中,具体取决于平台的二进制格式),但这显然不适用于可能以递归方式调用的过程.因此,在这种情况下,编译器必须在堆上创建那些分配和释放可能代价高昂的变量,或者在任何情况下只在堆栈上创建它们,并希望用户环境没有非常小的堆栈大小限制.

顺便说一句,在即将发布的Fortran 2015标准的草案中,递归过程已经成为默认值,并且如果一个人明确希望有一个不应该递归调用的过程,则会有一个新关键字"non_recursive".