变量会影响性能吗?

Posted

技术标签:

【中文标题】变量会影响性能吗?【英文标题】:Do variables affect performance? 【发布时间】:2016-06-09 04:44:58 【问题描述】:

我正在使用带有 QT 5.6 的 c++。我有两种样式的简单控制台应用程序,如下所示:

//First style

qstring x = “Hi!”;

void func()

        QTextStream(stdout) << x;


int main()

        while (true)
        
                func_one();
        


//Second style

void func()

        QTextStream(stdout) << “Hi!”;


int main()

        while (true)
        
                func();
        

这会对 cpu 造成更大的压力,因此性能会降低,这可能没有太大的区别,但是当我们将其应用于大规模的服务器时,例如每 2 秒建立一次连接的服务器,它会产生类似于循环的情况上面和多个变量(但不是相同的变量和数据)的资源使用量减少一点可以用更少的资源使用量带来很大的性能改进。因此,使用变量可以提高性能,但我将在我的函数中只使用一次变量,尽管该函数将被重复调用,或者使用变量会减慢程序,因为它必须重复检查 ram 的“x”值在哪里” 存储然后检索数据?

编辑 1:

我不会在我的代码中再次使用该变量,我们可以认为没有编译器优化。 @DrDonut 您给出的链接中的答案也没有回答是$array === (array) $arrayis_array($array) 快​​,即它是微优化,我还问第二种风格是微优化还是会损害性能。

【问题讨论】:

1) 编译器比你想象的要聪明——在上面的例子中,特别是如果你使用qstring const x,很可能会产生相同的代码。 2)现在不要担心性能。 3) 如果必须,请先衡量性能,然后再猜测什么会更好。 没关系。 在现实生活中,您没有对字符串进行硬编码的奢侈,您总是需要使用变量来更改数据。但是,您可以为 QTextStream(stdout) 创建一个变量,以防止它每次都被构造。 我知道这个答案是关于php的,但原理是一样的:***.com/questions/3470990/… 第二个版本也需要反复检查内存中值的存储位置,然后检索数据。 【参考方案1】:

您的示例很糟糕,因为可能会进行编译器优化,并且不清楚您是否会在不同的地方使用此变量,或者它只是一个将被丢弃的测试代码。

但通常您以错误的方式进行优化。优化单个变量或单个函数是没有意义的。你不应该猜测你的程序将把时间花在哪里,你应该首先按照它的工作方式和看起来不错的方式编写你的程序。

程序运行后,如果你发现它的性能不好,你应该寻找瓶颈——程序花费大量时间的地方。它们可以在分析器或调试器的帮助下找到,而不是通过猜测。

当你找到它们时,你需要优化这些关键的地方。

了解premature optimization

【讨论】:

以上是关于变量会影响性能吗?的主要内容,如果未能解决你的问题,请参考以下文章

许多 CSS 变量对性能的影响

从数组中提取变量对性能不利吗?

java方法中变量用final修饰对性能有影响!你觉得呢?

用 Javascript 中的参数替换局部变量是不是会影响性能?

IntVar 的域会影响 CP-SAT 求解器的性能吗

(Vue) 对计算属性中局部范围变量性能的影响