0

为什么在 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; };
}

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

4

1 回答 1

1

假设您已经正确地进行了分析并且这不是一场大乱斗,请查看生成代码的汇编差异,看看有什么不同。

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

于 2013-11-11T18:34:17.397 回答