我最近在没有任何指导的情况下学习Fortran,并尝试了不同的版本。我从this site找到了:
MODULE是否比COMMON阻止更好?
几乎总是如此。使用COMMON块的唯一原因是你 期望在只有FORTRAN 77的计算机上使用您的程序 编译器(它们仍然存在),或者如果它非常重要 控制数据在内存中的存储顺序。
好吧,使用模块肯定比使用普通块语法更甜。但在这两种情况下,内存使用和分配方面的差异是什么?它在性能和访问速度方面也有所不同吗?这个问题有意义吗?
答案 0 :(得分:4)
内存方面的一个区别是,您可以在模块中使用可分配的数组,但不是共同的。 (见Fortran common variables, allocatable array)。如果你有一个在编译时你不知道数组大小的数组会更方便。旧的FORTRAN方式是将数组声明为一个巨大的尺寸,希望足够大,但通常浪费空间。使用可分配数组,您可以以所需的精确大小分配数组。
我从不在新代码中使用COMMON。它更受限制并引入不必要的序列关联",即通过它们在存储器中的布局来关联变量。
答案 1 :(得分:4)
M.S.B。在他的回答中有它,但在我看来并没有足够的压力。 COMMON块中的变量完全按照块的定义顺序排列在内存中。从这个限制,没有动态内存对象(可分配,指针)可以在COMMON块中,紧接着。
"序列关联"意味着你可以指望变量的位置,例如,你可以使用两个后面的数组作为一个大数组。
COMMON块在现代代码中可能没有位置,尽管它们未被声明为过时。
说到速度,如果变量相同,访问它不会有任何区别,无论是在模块中还是在COMMON块中。