比如二维数组 a[2][2]
,使用 C,其在内存中存储为
a[0][0] a[0][1] a[1][0] a[1][1]
而在 Fortran 里,其顺序为
a[0][0] a[1][0] a[0][1] a[1][1]
Fortran 为何会使用这种存储方式,相对于 C 的方式是有优点还是?不明白为何要这么做,求解释。
比如二维数组 a[2][2]
,使用 C,其在内存中存储为
a[0][0] a[0][1] a[1][0] a[1][1]
而在 Fortran 里,其顺序为
a[0][0] a[1][0] a[0][1] a[1][1]
Fortran 为何会使用这种存储方式,相对于 C 的方式是有优点还是?不明白为何要这么做,求解释。
所谓的Row major order和Column-major order 的区别,主要看你拿这数组作什么运算,如果是要依次访问每列的元素,Fortran Order(即Column-major order)下每列在内存中是连续的,这种结构相对更加Cache-friendly。这并不是编程语言自身的特性,在C语言中完全可以使用Column-major order,只不过访问起来计算index不太习惯而已。Fortran大概是因为主要用于科学计算,Column-major order对于一些矩阵运算有性能优势。