我有一个子例程,它分配四个大小为 9 的向量,并对其进行一些操作。这些向量仅在该子程序内使用。在我的程序运行期间,该子例程被调用数千次。
每次调用子例程时都分配向量是否值得,还是创建一个全局变量并只分配一次向量更好?
最佳答案
对于非常大的工作数组(大型 3D 数组),我会声明(全局)模块变量,然后在模块中提供一个清理子例程。
但是,对于大小为 9 的向量来说,这实际上是没有必要的。将它们作为局部变量分配在堆栈上不需要任何成本。大小为 9 的局部变量,无论是显式的还是自动的,在堆栈上分配的成本都是零。 Fortran 标准不允许您决定分配发生的位置,但编译器通常会这样做。堆栈往往是默认值。
静态存储也是可能的(由 save
属性有效强制),但这里似乎没有必要。
关于performance - Fortran 性能,在每个子程序调用时分配或声明一个全局变量并分配一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61396652/