数组长度问题

时间:2011-03-13 06:29:10

标签: optimization compiler-optimization

这个问题涉及优化。假设我需要在代码中的两个位置处使用数组A的数组长度。我应该在两个地方使用函数a.length(),还是更快地为一个局部变量赋值a.length()并在两个地方使用它。

“更快”是指运行时间。而且,我正在渐渐地说话。

3 个答案:

答案 0 :(得分:2)

两次调用函数的渐近复杂性是相同的 - 在同一个参数上对同一(纯)函数的任何常量调用具有与该函数的单个调用相同的渐近复杂度,因为您可以只滚动对big-O的隐藏常数的调用数量恒定。

至于什么会更快,不能保证哪一个会更快。这取决于语言和编译器。我建议只是写两种方式并对结果进行计时,看看是否有明显的差异。也就是说,如果你正在撰写一些性能至关重要的东西而你无法两次致电.length(),那么你可能需要重新考虑你的方法,看看是否有更好的全局解决方案。除非您有充分理由相信您的程序在未经优化的版本中明显较慢,否则微优化很少值得付出努力。

答案 1 :(得分:1)

如果你不得不问这个问题,那么你还没有到位。如果你是,你已经拥有了你所描述的代码,你可以试试看。这种事情在很大程度上取决于你的语言和编译器,唯一重要的结果就是你看到的结果。

不要担心微观优化,直到你发现需要削减周期,即使这样,算法也是首先要检查的。

答案 2 :(得分:0)

用什么语言?在许多语言中,这些调用被优化掉(在编译时或通过JIT编译器)直接访问数组对象的长度字段。