【问题标题】:Fortran90: SAVE atribute or store in module?Fortran 90:保存属性或存储在模块中?
【发布时间】:2014-06-17 17:11:36
【问题描述】:

我正在编写一个程序,它会多次调用一个子程序。这个子例程循环遍历项的总和,每个项除以项数的阶乘(很像泰勒级数)。它总是相同的项数,所以除法阶乘总是相同的。为了不在每次调用中计算阶乘,最好只定义一个向量,然后只除(实际上是相乘;我将向量定义为1/n!)除以相应的坐标。例如:

S=(T0)+(T1/1)+(T2/2!)+(T3/3!)+...+(Tn/n!)

(这将计算多次,针对不同的数组T1,...,Tn

最佳实践是:将其定义为具有 save 属性的变量,还是将其放入模块中并将其包含在子例程中?还是有更好的选择? (为什么?)

从另一个问题 (fortran SAVE statement),我希望最好的办法是在子例程中使用 SAVE(因为我可能不会在任何其他子例程中使用此变量,我将不得不使用无论如何保存),但我欢迎对此提供一些反馈。

编辑:对不起,新增内容。假设最好的办法是使用 SAVE;可以将其定义为可分配变量吗?我知道可分配变量和常规变量来自内存的不同部分;我不知道这如何与 SAVE 属性交互......(我将依赖程序在退出时自动释放变量)。

【问题讨论】:

    标签: module fortran fortran90 subroutine


    【解决方案1】:

    这两种选择几乎相同。初始化或最终确定变量时可能会出现差异。

    您可以使用任何使用模块的代码中的模块变量的值来初始化或执行其他操作。子例程的局部变量实际上是它的局部变量。

    我看不出为什么通常会首选其中一个,这取决于程序的整体结构。以及变量的具体用途和用途是什么。

    我会稍微喜欢这个模块。对于大型可分配数组,您可以在需要时更轻松地释放内存,而无需使用特殊参数调用子例程。此外,您将获得子程序的简单代码,而无需检查它是否是第一次调用。

    可分配变量可以是save,没有任何问题。但是没有理由为什么本地 save 变量通常是最好的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-09
      • 2011-03-08
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 2013-06-27
      • 2019-03-03
      相关资源
      最近更新 更多