【发布时间】:2012-04-13 17:38:01
【问题描述】:
下面是两个几乎相同的程序,只是我切换了i 和j 变量。它们都运行不同的时间。有人可以解释为什么会这样吗?
版本 1
#include <stdio.h>
#include <stdlib.h>
main () {
int i,j;
static int x[4000][4000];
for (i = 0; i < 4000; i++) {
for (j = 0; j < 4000; j++) {
x[j][i] = i + j; }
}
}
第 2 版
#include <stdio.h>
#include <stdlib.h>
main () {
int i,j;
static int x[4000][4000];
for (j = 0; j < 4000; j++) {
for (i = 0; i < 4000; i++) {
x[j][i] = i + j; }
}
}
【问题讨论】:
-
你能添加一些基准测试结果吗?
-
@naught101 基准测试将显示 3 到 10 倍的性能差异。这是基本的 C/C++,我完全不知道它是如何获得这么多选票的......
-
@TC1:我不认为这是基本的;也许是中间的。但是,“基本”的东西往往对更多人有用也就不足为奇了,因此得到了很多人的支持。此外,这是一个很难用谷歌搜索的问题,即使它是“基本的”。
标签: c performance for-loop optimization cpu-cache