2

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

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

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

无论哪种情况,我的问题是我如何才能看到我的内存句柄中占用了多少空间,因为它也“指向”par1 和 par2。但是,如果我使用whos('handl'),我只会得到句柄的大小,而不是句柄+par1+par2。

谢谢!

4

2 回答 2

6

当您构造匿名函数时,您正在创建一个闭包(该函数捕获在其外部范围内定义的任何变量)。

您可以使用该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 使用写时复制策略,因此如果封闭工作区中的变量在被捕获后未更改,则不会产生额外的内存使用。

于 2013-05-22T21:57:29.900 回答
0

我想补充一点,当您在 matlab 中使用匿名函数时,它不仅将输入参数保存在其工作区中,还将创建它的整个工作区保存到其工作区中。

就我而言,这导致内存使用量急剧膨胀。因此,我将恢复正常处理..!

于 2013-05-22T23:38:18.083 回答