我的结构中的一个字段是函数句柄:
strct.handl=@(arg1,arg2)handl(arg1,arg2,par1,par2)
现在,每次使用句柄时都会定义 arg1 和 arg2,但是在定义句柄时会存储 par1 和 par2。因此,(如果我错了,请纠正我),处理函数,如指向 par1 和 par2 的指针。
无论哪种情况,我的问题是我如何才能看到我的内存句柄中占用了多少空间,因为它也“指向”par1 和 par2。但是,如果我使用
whos('handl')
,我只会得到句柄的大小,不会得到句柄+par1+par2。谢谢!
最佳答案
当你构造匿名函数时,你正在创建一个 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策略,因此如果封闭工作区中的变量在被捕获后没有更改,则不会产生额外的内存使用。
关于matlab - 函数句柄的内存大小 - MATLAB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16702080/