Dan*_*Dan 2 memory matlab closures function anonymous-function
我的结构中的一个字段是函数句柄:
strct.handl=@(arg1,arg2)handl(arg1,arg2,par1,par2)
Run Code Online (Sandbox Code Playgroud)
现在,每次使用句柄时都会定义arg1和arg2,但是在定义句柄时会存储par1和par2.因此,(纠正我,如果我错了),处理像par1和par2指针的功能.
在任何一种情况下,我的问题是我如何看到我的内存句柄占用了多少空间,因为它也"指向"par1和par2.但是,如果我使用whos('handl'),我将只获得句柄的大小,而不是处理+ par1 + par2.
谢谢!
构造匿名函数时,您将创建一个闭包(该函数捕获在其外部作用域中定义的所有变量).
您可以使用该functions方法获取函数句柄的捕获工作空间:
>> a = 1;
>> f = @(x) x+a;
>> S = functions(f)
S =
function: '@(x)x+a'
type: 'anonymous'
file: ''
workspace: {[1x1 struct]}
>> S.workspace{1}
ans =
a: 1
Run Code Online (Sandbox Code Playgroud)
我只是想解决@DankMasterDan指出的内存使用问题; MATLAB使用写时复制策略,因此如果封闭工作空间中的变量在捕获后不会更改,则不会产生额外的内存使用量.