for (int x = 0; x < height; x++) {
map[x][y] = new Plot(x, y, "map");
if (x == 199 && y < 199) {
x = 0;
y++;
}
}
我在这里有这个代码,我设置为地图创建一个200x200对象的2D数组,我想知道它是否是相同的速度或它确实运行得更快。我正在尝试优化阵列创建。
谢谢!
编辑:假设Y从0开始,高度始终为200 编辑2:谢谢所有回答的人:D我可以创造一些东西来测试它,但是呃
答案 0 :(得分:0)
考虑一下,如果你有200 * 200阵列并且你想在每个阵列中加入一些新的实例,你必须在每个单元&#34;单元格中进行操作。 = 40000个细胞。无论优化如何,你都无法做到更好。
即使你没有for-cycle并且用
做x[0][0] = ...
x[0][1] = ...
您仍然需要编写40000个命令
答案 1 :(得分:0)
生成的代码不会更快 - 生成的指令几乎相同;事实上,当打开编译器优化时,编译器可能很难有效地优化任一循环,因为它无法将它们识别为简单的循环。
绝大部分执行时间将用于分配新内存,并将指针写入pos_hint
数组。实际上,一个潜在的改进确实会跳出来:目前,您正在访问map
这样的数组:
map
等等。
这是不可取的,因为地址在内存中相距很远。以这样的方式访问内存总是更好,即彼此接近的地址在时间上彼此接近访问,因为这对缓存来说更友好。
因此,如果您要交换迭代轮次(例如map[0][0]
map[1][0]
map[2][0]
...
map[0][1]
map[1][1]
map[2][1]
...
map[0][2]
),那么可能会发现您的代码运行得更快 - 或者您可能不会;这一切都取决于机器的架构。