【问题标题】: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++)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-05
        • 2013-04-18
        • 2013-09-04
        相关资源
        最近更新 更多