在访问函数内部的数组时,我有一个关于效率/性能的问题。
假设我有一个循环遍历5,000个元素的数组的函数。在该函数内部,我在索引X
多次访问数组X[k]
从性能角度来看,将索引k处的值分配给循环中的临时变量(例如tmpVal = X[k]
)是否有利?换句话说,我可以通过避免一遍又一遍地访问同一位置的阵列来提高执行速度吗?
非常感谢你!
答案 0 :(得分:0)
在我的视图中,如果你需要在每个实例保留任何特定索引的值并为未来的实例覆盖该值,那么为索引分配时态变量将是唯一的。如果不是那么在执行时,数组执行仍然是尽可能快速有效。它确实可以节省内部值的大数组大小的循环时间,除非您确切知道要访问的值及其索引,但如果不是全部那么好
答案 1 :(得分:0)
让我用这个作为前缀,说明你想要达到的目标是最好的微优化,并且你应该专注于让你的代码易于遵循,而不是试图在这里挤出额外的性能
实际上,两者之间几乎没有区别:
由于处理器的片上缓存的智能使用,当您第一次访问阵列的元素时,它将被复制到缓存中,并且从中可以非常快速地访问。
如果您确实创建了一个临时副本,那么您将对象复制到一个新位置,这比仅仅访问阵列内的对象要贵(可能)。