performance - 'recursive' 属性如何影响 FORTRAN90 子例程的性能

标签 performance recursion fortran

我正在实现一项新功能,该功能可能会导致沿特定代码路径递归调用相当多的子例程。

因此我必须为这些子例程分配recursive 属性。

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

最佳答案

“正确”的答案是分析您的代码并进行测试。

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

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

关于performance - 'recursive' 属性如何影响 FORTRAN90 子例程的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29744810/

相关文章:

python - 是否可以在不超过最大递归深度的情况下在 python 中使用参数 m>=4 和 n>=1 计算递归 ackermann(m,n) 函数?

Ruby 递归函数

fortran - 计算前在打印语句中使用变量时,结果会发生变化

fortran - Fortran 中 SELECT TYPE 中的相同代码块

c# - 有没有办法加快在 winforms 文本框中显示大量文本的速度?

php - 将数据从关系数据库反规范化到非关系数据库的最佳实践

android - 为什么在缩放手势期间调用 setScaleX 会导致闪烁?

performance - Git注意到性能和替代方案

c# - 打印总和为特定值的所有子集

fortran - Fortran 2003 中类型和类的区别