以下代码:
int main() {
int a, b, c, d, e, f, g;
auto func = [&](){cout << a << b << c << d << e << f << g << endl;};
cout << sizeof(func) << endl;
return 0;
}用g++ 4.8.2编译的输出56
由于所有局部变量都存储在同一个堆栈帧中,因此记住一个指针就足以定位所有局部变量的地址。为什么lambda表达式会构造这么大的未命名函数对象?
发布于 2014-04-18 08:12:11
我不明白你为什么看起来很惊讶。
C++标准提供了一组需求,每个实现都可以自由选择满足需求的任何策略。
为什么实现要优化lambda对象的大小?
具体而言,您是否意识到这将如何将此lambda生成的代码绑定到为周围函数生成的代码?
很容易说嘿!这是可以优化的!,但它更难实际优化,并确保它在所有边缘的情况下工作。因此,就我个人而言,我更喜欢简单和有效的实现,而不是对其进行优化的拙劣尝试。
..。尤其是当工作是这么容易的时候
struct S { int a, b, c, d, e, f, g; };
int main() {
S s = {};
auto func = [&](){
std::cout << s.a << s.b << s.c << s.d << s.e << s.f << s.g << "\n";
};
std::cout << sizeof(func) << "\n";
return 0;
}看,妈:只有4个字节!
https://stackoverflow.com/questions/23149555
复制相似问题