【问题标题】:Memory size of function handle - MATLAB函数句柄的内存大小 - MATLAB
【发布时间】:2013-05-18 02:43:36
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

    标签: matlab function memory closures anonymous-function


    【解决方案1】:

    当您构造匿名函数时,您正在创建一个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 策略,因此如果封闭工作区中的变量在被捕获后未更改,则不会产生额外的内存使用。

    【讨论】:

    • 感谢 Amro!完美回答我!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      • 2013-07-22
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多