函数句柄的内存大小——MATLAB

函数句柄的内存大小——MATLAB,matlab,function,memory,closures,anonymous-function,Matlab,Function,Memory,Closures,Anonymous Function,我的结构中的一个字段是函数句柄: strct.handl=@(arg1,arg2)handl(arg1,arg2,par1,par2) >> a = 1; >> f = @(x) x+a; >> S = functions(f) S = function: '@(x)x+a' type: 'anonymous' file: '' workspace: {[1x1 struct]} >> S.

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

strct.handl=@(arg1,arg2)handl(arg1,arg2,par1,par2)
>> 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
现在,每次使用句柄时都会定义arg1和arg2,但是定义句柄时会存储par1和par2。因此,(如果我错了,请纠正我),处理指向par1和par2的指针之类的函数

在这两种情况下,我的问题是如何看到我的内存句柄占用了多少空间,因为它还“指向”par1和par2。但是,如果我使用
whos('handl')
,我将只获得句柄的大小,而不是句柄+par1+par2


谢谢

构造匿名函数时,您正在创建一个(该函数捕获在其外部作用域中定义的任何变量)

您可以使用该方法获取函数句柄的捕获工作区:

strct.handl=@(arg1,arg2)handl(arg1,arg2,par1,par2)
>> 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使用了一种策略,因此如果捕获后封闭工作区中的变量没有改变,就不会产生额外的内存使用。

我想补充的是,当在MATLAB中使用匿名函数时,它不仅会在工作区中保存输入参数,它还将在其中创建的整个工作空间保存到其工作空间中


在我的例子中,这导致了内存使用量的急剧膨胀。因此,我将回到正常的处理

谢谢阿姆罗!完美地回答了我!