【发布时间】:2012-06-24 07:15:40
【问题描述】:
for(int i = 0; i<100; i++)
for(int j = 0; j<100; j++)
array[j][i] = 0;
// array[i][j] = 0;
我的教授说以第一种方式初始化二维数组的成本要高于第二种方式。有人可以解释导致这种情况的引擎盖下发生了什么吗?或者,这两种初始化方式的性能是否相同?
【问题讨论】:
-
参考位置:您以“慢”的方式不必要地使 CPU 缓存失效。
-
@dlev:你为什么不把这个作为答案发布?
-
因为 dlev 与代表无关。 dlev 是关于爱的
-
这份有用的文档非常详细地描述了内存局部性和许多其他事实:akkadia.org/drepper/cpumemory.pdf
-
您的教授可能在谈论数组的访问模式,而不是的初始化。初始化(在声明时)有自己的语法(
double array[100][100] = { 0 };),现代编译器中的实现可能“优于”这里所说的任何东西。
标签: c arrays assembly multidimensional-array localityofreference