gpt4 book ai didi

c++ - 微优化——访问递归成员时的编译器优化

转载 作者:行者123 更新时间:2023-11-28 00:54:18 27 4
gpt4 key购买 nike

我感兴趣的是从一开始就编写好的代码,而不是稍后优化代码。抱歉没有提供基准我目前没有工作场景。感谢您的关注!

与 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 ->,则这两个函数是相同的。您建议的优化规则被广泛称为公共(public)表达式消除,几十年来得到绝大多数编译器的支持。

关于c++ - 微优化——访问递归成员时的编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12416055/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com