具有“=”捕获和内存使用的 Lambda 函数
Lambda functions with "=" capture and memory usage
在我的脑海中,当我创建一个 lambda [=]{...}
从父函数克隆到 lambda 的所有变量。
因此以下代码将使用过多内存,因为变量 a...z 将被复制到 lambda 函数:
void foo() {
long double a = 0.123456789;
long double b = 0.123456789;
long double c = 0.123456789;
//....
long double z = 0.123456789;
auto val = [=]() {return a+z;};
}
不是吗?
[=]
将导致它只捕获 lambda 中实际使用的变量。
在您的情况下,val
将拥有 a
和 z
的副本。假设没有填充(不应该有),那么 sizeof(val) == 2*sizeof(long double)
.
在我的脑海中,当我创建一个 lambda [=]{...}
从父函数克隆到 lambda 的所有变量。
因此以下代码将使用过多内存,因为变量 a...z 将被复制到 lambda 函数:
void foo() {
long double a = 0.123456789;
long double b = 0.123456789;
long double c = 0.123456789;
//....
long double z = 0.123456789;
auto val = [=]() {return a+z;};
}
不是吗?
[=]
将导致它只捕获 lambda 中实际使用的变量。
在您的情况下,val
将拥有 a
和 z
的副本。假设没有填充(不应该有),那么 sizeof(val) == 2*sizeof(long double)
.