C-order/Fortran-order(Row-/Column-major order)

1. row-major / column-major order

无论是行序优先还是列序优先,其实在计算机计算中,指的都是在线性空间(linear storage,如 RAM,也即连续内存存储 contiguous in ,memory)存储多维数组(multidimensional arrays)的方式。


这里写图片描述

数据的分布方式(data layout)对于在不同编程语言间正确地传递多维数组是十分关键的。

2. 地址计算

这里我们将多维数组的概念泛化为更高维。对于 d 维数组 N1×N2××Nd,该数组中的一个元素为 (n1,n2,,nd)(其中 nk[0,Nk1],从 0 开始计数),其在内存中的地址应当为:

  • 行序(row-major order):对于行序,最后一维是连续的,

    nd+Nd(nd1+Nd1(nd2+Nd2(+N2n1)))=k=1d=k+1dNnk

  • 列序(column-major order):对于列序,第一维是连续的,

    n1+N1(n2+N2(n3+N3(+Nd1nd))))=k=1d(=1k1N)nk

references

原文地址:https://www.cnblogs.com/mtcnn/p/9422239.html