【发布时间】:2017-10-30 03:51:16
【问题描述】:
我从 c 测试中得到了这个问题。我很好奇问题的表现肯定。我不知道该怎么回应。我的问题完全一样。为什么性能提高了?
假设您有以下代码迭代一个大型(2000 到 2000 年)平方二维数组并计算非零元素的数量 数组。您交换两个内部循环的顺序,以便 x 循环是 现在是 y 循环。这极大地提高了您的性能 代码。为什么?
int total = 0;
for (int x = 0; x < side_length; x++) {
for (int y = 0; y < side_length; y++) {
if(array[y][x] != 0) {
total += 1;
}
}
}
【问题讨论】:
-
我没有看到任何数组!仅仅因为某物被称为“数组”并不意味着它是一个。提供minimal reproducible example。
-
因为你是按顺序访问内存的,这对于cpu来说效率更高,因为他可以优化内存访问。如果你反转循环,内存访问将被稀疏,因此效率较低。
-
它被称为“locality”属性。它被更有效地缓存。
-
@EugeneSh。我不知道这个概念。有用。
标签: c performance