以行主要或列主要方式将多维数组存储在内存中有什么区别?
据我所知,'C'似乎遵循Row Major风格。
出于好奇心,我想知道,一种风格有什么好处而不是另一种风格?
答案 0 :(得分:2)
一般情况下,你可以用另一个来模仿每个人,所以一个人在另一个人身上没有固有的优势。但是,缓存实现通常将引用的局部性视为用于估计是否将很快访问存储器位置的积极因素。这可能会影响性能。例如,在行主要实现中,此代码段:
int sum = 0;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
sum += a[i][j];
可能比以下更快:
int sum = 0;
for (int i = 0; i < m; ++i)
for (int j = 0; j < n; ++j)
sum += a[j][i];
您应该尝试设计算法,以便在行主要环境中的行和列主要环境中的列上对外部循环进行编码,以最大限度地减少缓存未命中。