为什么 Fortran 的编译性能要好过 C / C++
应该是有几个原因吧。
Fortran语言的Array Model及其严格的Alias语意(与C++相比). Fortran的Array Model使编译器可以很安全的做一些在C++不能做的优化,而C++的Pointer Alias更是优化中非常难做的一个地方,然而指针却是C++中非常难避免的地方(如动态内存分配),于是Pointer Alias也就很难避免的(然而这个问题在Fortran是不存在的),C99引进的restrict关键字其实可以一定程度上帮助编译器做Pointer Alias工作,所以C99的库很多部分改成了加上restrict关键字,利于编译器优化。另外,Array Model是非常适合编译器做矢量优化(vectorization),编译器可以清晰的知道数据的内存布局,使编译器可以做更好的优化。这点在《C++语言的设计与演化》中,Bjarne提到过矢量优化,也提到过为何Fortran因此而在数值计算中这么好。
历史原因。 Fortran具有足够长的历史,更是在数值计算中长期占据主要地位。编译器为其做了很多的优化,与此同时,无数的前辈使用Fortran编写了高度优化的数值计算代码,这都是无法忽视的原因,这有些如同C++在游戏编程的情形吧。
求采纳,谢谢!