函数句柄的内存大小——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中使用匿名函数时,它不仅会在工作区中保存输入参数,它还将在其中创建的整个工作空间保存到其工作空间中
在我的例子中,这导致了内存使用量的急剧膨胀。因此,我将回到正常的处理 谢谢阿姆罗!完美地回答了我!