我的结构中的一个字段是函数句柄:
strct.handl=@(arg1,arg2)handl(arg1,arg2,par1,par2)
现在,每次使用句柄时都会定义arg1和arg2,但是在定义句柄时会存储par1和par2。因此,(如果我错了,请纠正我),处理像par1和par2指针这样的函数。
在任何一种情况下,我的问题是我如何才能看到我的记忆手柄中有多少空间占用,因为它也会指向'对于par1& PAR2。但是,如果我使用whos('handl')
,我将只获得句柄的大小,而不是处理+ par1 + par2。
谢谢!
答案 0 :(得分:6)
构造匿名函数时,您将创建一个closure(该函数捕获在其外部作用域中定义的所有变量)。
您可以使用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
我只是想解决@DankMasterDan指出的内存使用问题; MATLAB使用copy-on-write策略,因此如果封闭工作空间中的变量在捕获后没有更改,则不会产生额外的内存使用量。
答案 1 :(得分:0)
我想补充一点,当您在matlab中使用匿名函数时,它不仅会将输入参数保存在其工作空间中,还会将创建它的整个工作空间保存到其工作空间中。
因为在我的情况下,这导致了大量的内存使用量膨胀。因此,我将恢复正常的句柄..!