Avatar ·

什么是“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