这个对比对 C 的代码很不利:
首先通过定义 `int**` 来实现多维数组本身就降低性能,它不但多分配了很多指针,访问具体数值需要两次指针操作,而且把整个数组拆散开了,无法放到 CPU 缓存中计算,正确方法是直接 int array[][] ,这样整个 array 在内存中是连续的,就更有可能放到 CPU cache 中加速访问。有人会说这样做有爆栈的风险,但是你 Fortran 分配数组也是在栈区分配的啊,也测试中也没有出现爆栈啊。
其次 C 语言如果想要更快还可以把内层循环简化成一个循环执行多个相加运算,利于编译器进行 SIMD 优化,得到的结果会更好。
最后,楼主的 C 代码中并没有对各个指针数组的元素 free ,妥妥的内存泄漏。