performance - Fortran 性能,在每个子程序调用时分配或声明一个全局变量并分配一次
问题描述
我有一个子程序,它分配四个大小 = 9 的向量,并对其进行一些操作。这些向量只在这个子程序中使用。在我的程序运行期间,该子程序被调用了数千次。
每次调用子程序时分配向量是否值得,或者最好创建一个全局变量并且只分配一次向量?
解决方案
对于非常大的工作数组(大型 3D 数组),我会声明(全局)模块变量,然后在模块中方便地使用清理子例程。
但是,对于大小为 9 的向量,这实际上是不必要的。将这些作为局部变量分配到堆栈上没有任何成本。大小为 9 的局部变量,无论是显式的还是自动的,在堆栈上分配的成本为零。Fortran 标准不允许您决定分配发生的位置,但编译器通常会这样做。堆栈往往是默认设置。
静态存储也是可能的(有效地由save
属性强制),但在这里似乎没有必要。
推荐阅读
- javascript - 检查两个数组中各个元素之间的值
- node.js - 我想在nodejs中设置处理用户和管理员角色的代码
- heroku - 无法在 Mac 上安装 Heroku,它说 Apple 无法检查它是否存在恶意软件
- python - 三角分布随机变量
- javascript - 映射数组对象和更新状态变量。数据丢失
- php - foreach 循环循环显示要在单独表中显示的日期数组
- python - 将值传递给python中的文件
- python - 是否可以在 pydantic 中使用任意键名?
- java - 如何仅计算和存储 JTable 中可见的内容?
- javascript - 为什么我的复选框没有使用 Redux 更新?