2016-06-09 140 views
0

我正在使用C++与QT 5.6。我有2款简单的控制台应用程序如下:变量是否会影响性能?

//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秒建立一次连接就会产生类似于上面循环的情况,并且具有多个变量(但不是相同的变量和数据),资源利用率稍低一点可能导致性能提高,并且资源利用率较低。因此,使用变量可以提高性能,但我将在函数中只使用一次该变量,虽然该函数将被重复调用,或者将使用变量会减慢程序的运行速度,因为它必须重复检查内存的“x “存储然后检索数据?

编辑1:

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

+3

1)编译器是比你想象的更聪明 - 在上述情况下,特别是如果你使用'QString的常量x',相同的代码很可能产生。 2)现在不要担心表现。 3)如果你必须,在测试性能之前,先试着猜测什么会更好。 –

+0

没关系。 –

+0

在现实生活中,您没有硬编码字符串的奢侈品,您总是需要使用变量来更改数据。但是,您可以为'QTextStream(stdout)'创建一个变量,以避免每次都构建它。 –

回答

5

你的例子是坏的,因为可能的编译器优化,因为它不清楚你会在不同的地方使用这个变量,或者它只是一个测试代码将被抛出。

但一般来说,你是在错误的方式进行优化。没有意义优化单个变量或单个函数。你不应该猜测你的程序在哪里花费时间,你应该首先按照它的工作方式编写程序并且看起来没问题。

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

当您找到它们时,您需要优化这些关键位置。

阅读premature optimization

相关问题