【问题标题】:How does the loop become more efficient循环如何变得更有效率
【发布时间】:2016-01-12 13:56:48
【问题描述】:
您好,我在回答 stackoverflow 问题时遇到了以下代码。以下是与问题没有直接联系的答案,但它似乎提高了代码的效率。
for (int i = 0; i < nodeList.getLength(); i++)
改成
for (int i = 0, len = nodeList.getLength(); i < len; i++)
提高效率。第二种方式可能是最好的,因为它倾向于
使用更扁平、可预测的内存模型。
我阅读了有关平面内存模型的信息,但我无法理解这一点。即,它以何种方式使代码更高效。谁能给我解释一下。
参考:https://stackoverflow.com/a/12736268/3320657
【问题讨论】:
标签:
loops
for-loop
memory-management
【解决方案1】:
nodeList.getLength()不是在程序每次循环时调用,而是调用一次,存储在整数len中,然后将i与len进行比较,而不是运行nodeList.getLength()。
【解决方案2】:
平面内存模型或线性内存模型是指一种内存寻址范式,其中“内存在程序中表现为单个连续的地址空间”。 CPU 可以直接(和线性)寻址所有可用的内存位置,而无需求助于任何类型的内存分段或分页方案。
记住这一点,计算机一次声明一行内存。在行本身内声明变量时,它会减少寻找值的压力。
for (int i = 0, len = nodeList.getLength(); i < len; i++)
比;
更有效率
len = nodelist.getLength();
for (int i = 0, i < len; i++)