4

我最近在没有任何指导的情况下学习 Fortran,并尝试了不同的版本。我从这个网站发现:

MODULE 比 COMMON 块好吗?

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

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

4

2 回答 2

4

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

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

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

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

于 2014-05-21T05:28:19.360 回答
4

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

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

于 2014-05-20T23:11:48.830 回答