【问题标题】:Is declaring a variable and using it has better performance than getting the variable every time?声明变量并使用它是否比每次都获取变量具有更好的性能?
【发布时间】:2020-12-12 15:18:14
【问题描述】:

这是一个幼稚的问题。但仍然在问..考虑以下代码:

func1(obj.state)
func2(obj.state)
func3(obj.state)
func4(obj.state)

用下面的代码替换上面的代码是否有任何性能改进或者根本不重要(现代编译器可以自己优化这些东西..?)。

value = obj.state
func1(value)
func2(value)
func3(value)
func4(value)

如果 state 是一个需要一些时间来计算的大函数,那么第二个代码肯定会有更好的性能。我问的是什么时候它只是一个状态。

我想到这个是因为,在第一种情况下,它首先要转到对象的引用,然后必须转到状态指向的引用。但在第二种情况下,它可以直接转到 value 指向的引用。这是空间和时间的权衡。

这是否因语言而异?

【问题讨论】:

  • 大多数编程语言的设计都是为了将​​访问成员的成本降到最低。一些编译器可能会优化后续访问。唯一确定的方法是分析两段代码,看看哪一个表现更好,如果有的话。
  • 它可能因语言而异,但大多数现代编译器都足够聪明,可以优化上面的代码,因为您不断要求相同内存地址的值。
  • 另外,除非您确定需要解决的实际性能问题,否则您根本不必担心这一点。
  • 这也取决于obj。编译器能否证明函数不会修改obj.state 而其他线程也不会修改?如果 obj 是一个局部变量,这会更容易。

标签: performance


【解决方案1】:

问您:如果结果不正确,更好的性能对您来说重要吗?

第一个代码片段使用每个函数调用的最新状态,第二个 - 所有调用的相同状态。如果你知道状态没有改变,而编译器不知道,那么第二个片段会更好。否则使用第一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-09
    • 2014-08-21
    • 2011-12-06
    • 2020-04-10
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多