我目前正在处理大型fortran 90
代码。大多数模块具有大量子例程(> 15)。模块USE
在其规范部分中的其他模块,而它们的子例程USE
其他模块在其上面。这是它的样子:
MODULE OneModule
USE GlobalConstant
USE GlobalVariable
CONTAINS
SUBROUTINE Subroutine1()
[...]
END SUBROUTINE Subroutine1
SUBROUTINE Subroutine2()
USE Mesh
[...]
END SUBROUTINE Subroutine2
[Other Subroutines]
END MODULE OneModule
在每个模块中看到这一点,我想知道这是为了清晰还是优化。如果模块OneModule
具有大量子例程,如果我们USE
规范部分中的模块MESH
,如果只有少数子例程需要它,它会影响性能吗?
答案 0 :(得分:8)
如果USE的定位对执行时间产生任何影响,我会被震惊(并向编译器供应商编写错误报告),这是典型的编译器实现。它可能会对编译时间产生无关紧要的影响。
在内部或外部作用域中的定位更像是与标识符可访问性的程序要求相交的首选编程风格的问题。
(有一个例外,但这里没有关系.F2003为IEEE浮点支持引入了一组内部(编译器提供的)模块。仅仅存在一些这些模块可以改变编译器生成的代码对于USE范围内的任何事情。)