C++ lambda 中,成员函数按值调用比按引用调用更快

C++ lambda, member function call by value faster than by reference

本文关键字:引用 调用 值调用 C++ 成员 函数 lambda      更新时间:2023-10-16

为什么在 lambda 中按值传递比按引用传递它更快?按值与按参考相比,每次快 1-2%。

class Foo
{
private:
    int value;
public:
    Foo(int value) { this->value = value;  }
    std::function<int()> lambdaTestByValue();
    std::function<int()> lambdaTestByReference();
};
std::function<int ()> Foo::lambdaTestByValue()
{
    return [=]() { return value; };
}
std::function<int()> Foo::lambdaTestByReference()
{
    return [&]() { return value; };
}

在这种情况下,是什么使引用变慢?这适用于优化或不优化。

假设您已经正确分析并且这不是一场野鹅追逐,请查看生成的代码的程序集差异,看看有什么不同。

它也可能是小对象优化,即如果 std::function 中的状态足够小,它将把数据存储在对象本身中,如果捕获的函数更大,它将存储在堆上,这将需要间接寻址和查找。