函数句柄的内存大小 - MATLAB

时间:2013-05-22 21:44:04

标签: matlab function memory closures anonymous-function

我的结构中的一个字段是函数句柄:

strct.handl=@(arg1,arg2)handl(arg1,arg2,par1,par2)

现在,每次使用句柄时都会定义arg1和arg2,但是在定义句柄时会存储par1和par2。因此,(如果我错了,请纠正我),处理像par1和par2指针这样的函数。

在任何一种情况下,我的问题是我如何才能看到我的记忆手柄中有多少空间占用,因为它也会指向'对于par1& PAR2。但是,如果我使用whos('handl'),我将只获得句柄的大小,而不是处理+ par1 + par2。

谢谢!

2 个答案:

答案 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中使用匿名函数时,它不仅会将输入参数保存在其工作空间中,还会将创建它的整个工作空间保存到其工作空间中。

因为在我的情况下,这导致了大量的内存使用量膨胀。因此,我将恢复正常的句柄..!