是的,这是一个家庭作业问题,我只需要朝正确的方向插入
哪个 C++ 代码块更快,为什么?我认为它是最上面的一个,因为 [i] 数组按顺序使用,或者我在这里错了吗?
double A[100][100];
...
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 100; j++) {
A[i][j] = i * j;
}
}
double A[100][100];
...
for (int j = 0; j < 100; j++) {
for (int i = 0; i < 100; i++) {
A[i][j] = i * j;
}
}
最佳答案
如果不运行和分析您的代码,就无法知道哪段代码更快。
我们可以猜测位置和缓存行为将如何影响该时间(您的猜测是正确的),但猜测并不能代替分析。 (参见:How can I profile C++ code running in Linux?)
第一个版本可能更快的一个原因:
- 按照数组元素在内存中的排列顺序访问数组元素可以让缓存利用这一点。 (参见:What is “cache-friendly” code?)
为什么可能没有区别:
- 整个 10000 个元素都可以放入缓存,从而使上述优化变得毫无意义。
我想不出第二个会更快的任何原因,但我之前一直很惊讶。
关于C++代码速度,哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19460984/