gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:18:05 25 4
gpt4 key购买 nike

为什么在 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 中的状态足够小,它将把数据存储在对象本身中,如果捕获的函数更大,它将存储在堆上,这需要间接寻址和查找。

关于C++ lambda,按值调用成员函数比按引用调用更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19913052/

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