什么是“cache-friendly”代码以及如何用C++编写高效程序?
大家好!我是一名初学C++的开发者,正在编写一些用于数据处理的小程序。最近我遇到了“cache-friendly”(缓存友好)这个术语,并意识到我的程序可能运行得比预期慢。
我有一个简单的例子:我处理一个10000x10000的二维数组。第一种方式是按行遍历(外层循环i,内层循环j)。第二种是按列遍历(外层循环j,内层循环i)。在我的笔记本上,第一个选项执行时间为0.3秒,而第二个选项需要2.5秒!尽管代码做的是相同的事情,但性能差距几乎达到8倍。
以下是示例代码:
```cpp
const int N = 10000;
int arr[N][N];
// 选项1:按行遍历(快速)
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
arr[i][j] = i * j;
}
}
// 选项2:按列遍历(慢速)
for (int j = 0; j < N; j++) {
for (int i = 0; i < N; i++) {
arr[i][j] = i * j;
}
}
```
为什么会有如此巨大的差异?是什么让代码变得“c