0

これをラムダで参照するよりも値で渡す方が速いのはなぜですか? 参照による値による比較は、毎回 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 に答える