我有兴趣从一开始就编写好的代码,而不是在以后优化代码。抱歉,没有提供基准,我目前没有可行的方案。感谢您的关注!

与FunctionX相比,使用FunctionY有哪些性能提升?

对此已经有很多关于stackoverflow的讨论,但是我对访问子成员(递归)时的情况感到怀疑,如下所示。编译器(例如VS2008)是否可以将FunctionX优化为类似FunctionY的东西?

void FunctionX(Obj * pObj)
{
   pObj->MemberQ->MemberW->MemberA.function1();
   pObj->MemberQ->MemberW->MemberA.function2();
   pObj->MemberQ->MemberW->MemberB.function1();
   pObj->MemberQ->MemberW->MemberB.function2();
   ..
   pObj->MemberQ->MemberW->MemberZ.function1();
   pObj->MemberQ->MemberW->MemberZ.function2();
}

void FunctionY(Obj * pObj)
{
   W * localPtr = pObj->MemberQ->MemberW;
   localPtr->MemberA.function1();
   localPtr->MemberA.function2();
   localPtr->MemberB.function1();
   localPtr->MemberB.function2();
   ...
   localPtr->MemberZ.function1();
   localPtr->MemberZ.function2();
}

最佳答案

如果所有成员指针都不是volatile或指向volatile的指针,并且链中的任何成员都没有operator ->重载,则两个函数都相同。
您建议的优化规则被广泛称为“通用表达式消除”,几十年来,绝大多数编译器都支持这种优化规则。

09-19 08:58