匿名函数是在内存中持久存在,还是按值传递
Do anonymous function are persistent in memory, or are they pass by value
在 C++ 中,当我们做这样的事情时:
void a_function(void (*function_name)(char *data))
{
char *data = new char[1];
function_name(data);
}
a_function([](char *data) {
//do sth
});
我猜 function_name 是一个指向函数的指针。但是当我传递一个匿名函数时,在传递之前为这个函数分配的内存中是否有一个space?
如果我没有传递匿名函数但传递了现有函数的地址,它是否与上面的代码片段相同?
实际上,只要编译器无法证明没有人调用它,无状态 lambda 就会存在一个函数。此函数在编译时存储在您的可执行文件中,并在 运行 时加载。除非是 dll 或 so 格式(或其他类似的东西),它的寿命与程序一样长。
理论上,调用函数时存在有效的函数指针运行。您从无状态 lambda 获得的指针是一个有效的函数指针,当创建它的 lambda 被销毁时它不会变得无效。
在 C++ 中,当我们做这样的事情时:
void a_function(void (*function_name)(char *data))
{
char *data = new char[1];
function_name(data);
}
a_function([](char *data) {
//do sth
});
我猜 function_name 是一个指向函数的指针。但是当我传递一个匿名函数时,在传递之前为这个函数分配的内存中是否有一个space?
如果我没有传递匿名函数但传递了现有函数的地址,它是否与上面的代码片段相同?
实际上,只要编译器无法证明没有人调用它,无状态 lambda 就会存在一个函数。此函数在编译时存储在您的可执行文件中,并在 运行 时加载。除非是 dll 或 so 格式(或其他类似的东西),它的寿命与程序一样长。
理论上,调用函数时存在有效的函数指针运行。您从无状态 lambda 获得的指针是一个有效的函数指针,当创建它的 lambda 被销毁时它不会变得无效。