【问题标题】:Is there a difference memory-wise between using Common Blocks and Modules in Fortran 90在 Fortran 90 中使用通用块和模块在内存方面是否存在差异
【发布时间】:2014-07-09 09:03:35
【问题描述】:

我最近在没有任何指导的情况下学习 Fortran,并尝试了不同的版本。我从this site找到:

MODULE 比 COMMON 块更好吗?

几乎总是是的。使用 COMMON 块的唯一原因是,如果您 期望在只有 FORTRAN 77 的计算机上使用您的程序 编译器(它们仍然存在),或者如果您非常重要 控制数据在内存中的存储顺序。

嗯,使用模块在语法上肯定比使用通用块更甜。但是在这两种情况下,内存使用和分配有什么区别?它在性能和访问速度方面也有影响吗?这个问题有意义吗?

【问题讨论】:

  • 附带说明,链接页面是 1997 年的讲座。

标签: module fortran fortran90 fortran-common-block


【解决方案1】:

M.S.B.在他的回答中有它,但在我看来并没有足够强调它。 COMMON 块中的变量完全按照块定义中的顺序排列在内存中。从这个限制,没有动态内存对象(可分配,指针)可以在 COMMON 块中,紧随其后。

“序列关联”意味着您可以依靠变量的放置方式,例如,使用以下两个数组作为一个大数组。

COMMON 块在现代代码中可能没有位置,尽管它们没有被宣布为过时。

在速度方面,如果变量相同,访问它应该没有任何区别,无论是在模块中还是在COMMON块中。

【讨论】:

    【解决方案2】:

    内存方面的一个区别是您可以在模块中使用可分配数组,但不能通用。 (见Fortran common variables, allocatable array)。如果您有一个在编译时不知道数组大小的数组,则会方便得多。旧的 FORTRAN 方法是将数组声明为某个希望足够大的巨大尺寸的数组,但这通常会浪费空间。使用可分配数组,您可以按所需的精确大小分配数组。

    我从不在新代码中使用 COMMON。它更受限制,并带来了不必要的“序列关联”,即通过变量在内存中的布局来关联变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      相关资源
      最近更新 更多