Tim*_*upe 4 c++ optimization performance
我正在研究一些看似写得不好的现有c ++代码,并且经常被调用.我想知道我是否应该花时间更改它,或者编译器是否已经将问题优化掉了.
我正在使用Visual Studio 2008.
这是一个例子:
void someDrawingFunction(....)
{
GetContext().DrawSomething(...);
GetContext().DrawSomething(...);
GetContext().DrawSomething(...);
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
我将如何做到这一点:
void someDrawingFunction(....)
{
MyContext &c = GetContext();
c.DrawSomething(...);
c.DrawSomething(...);
c.DrawSomething(...);
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
Mic*_*hne 11
如果您确定这是性能问题,请更改它.如果GetContext是一个函数调用(而不是宏或内联函数),那么编译器每次都会调用它,因为编译器不一定能看到它在做什么,因此,编译器可能赢了不知道它可以消除呼叫.
当然,你需要确保GetContext总是返回相同的东西,并且这个'优化'是安全的.
如果它在逻辑上是正确的,那么第二种方式,即多次调用GetContext()一次不会影响你的程序逻辑,即使你对它进行分析并证明没有性能差异,我也会采用第二种方式.因此,下一个查看此代码的开发人员不会再问同一个问题.