Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory matlab中没有释放内存?_Memory_Matlab - Fatal编程技术网

Memory matlab中没有释放内存?

Memory matlab中没有释放内存?,memory,matlab,Memory,Matlab,我正在运行一个脚本来设置一个情节的动画(模拟水流)。过了一会儿,我通过执行ctrl-c来终止循环。 这样做了几次后,我得到了错误: ??? Error: Out of memory. 在我开始接收到该错误后,对脚本的每次调用都会生成该错误。 现在,它发生在我调用的函数内部的任何东西被执行之前,也就是说,即使我将行a=1添加为我调用的函数的第一行,我仍然会得到错误并且没有打印输出,因此函数内部的代码甚至不会被执行。 这可能是什么原因造成的 听起来您没有清除任何变量。您应该提供一种在不点击ctrl

我正在运行一个脚本来设置一个情节的动画(模拟水流)。过了一会儿,我通过执行ctrl-c来终止循环。 这样做了几次后,我得到了错误:

??? Error: Out of memory.
在我开始接收到该错误后,对脚本的每次调用都会生成该错误。
现在,它发生在我调用的函数内部的任何东西被执行之前,也就是说,即使我将行
a=1
添加为我调用的函数的第一行,我仍然会得到错误并且没有打印输出,因此函数内部的代码甚至不会被执行。
这可能是什么原因造成的

听起来您没有清除任何变量。您应该提供一种在不点击ctrl-c的情况下停止循环的方法(编写一个带有“停止”按钮和显示器的简单GUI),然后在脚本中清理工作区,或者在脚本开始时清除变量


您是否有意在循环的每次迭代中存储所有数据(或某些大型组件)?

可能有几个原因

  • 您的脚本很可能创建了一些正在填充内存的变量。跑

    clear all
    
    在重新启动脚本之前,清除所有变量,或者将脚本更改为函数(函数返回后将自动删除所有临时变量)。请注意,这也会清除所有已加载的函数,因此您的下一次脚本执行必须再次加载它们,这将使下一次执行的速度降低一点(通常很小)。仅调用
    clear
    即可

  • 可能是通过在彼此上方绘制多个绘图(不首先清除轴)来设置动画。因此,可能会耗尽Java堆空间。可以单独关闭打开的地物,也可以运行

    close all
    
    您还可以增加Matlab在您的系统上使用的Java内存量()——请注意,该限制通常相当低,如果您想查看大量的数字,这会让人恼火

  • 尤其是如果您运行的是旧版本的Windows,您的内存可能会出现碎片。Matlab需要连续的可用空间块来分配变量。要检查内存碎片,请运行

    memory
    
    并查看最大可能变量大小的数字。如果这远小于所有阵列的可用大小,那么是时候重新启动Matlab了(我想如果您使用的是需要重新启动才能解决问题的Windows版本,您可能需要考虑使用Win7安装一台新计算机)


  • 您也可以尝试使用
    pack
    命令,例如:

    close all;
    clear all;
    pack;
    

    清除记忆。虽然在最近的一次mathworks研讨会之后,我问了一位mathworks大师,他也同意了@Andrew Janke关于内存碎片的评论。通常退出并重新启动matlab会帮我解决这个问题(在XP上)。

    全部清除
    全部关闭
    是释放内存的直接方法,这是所有非初学者都知道的

    主要问题是,当您完成了一些大数据处理,并清除/关闭了所有内容时,matlab仍然使用大量内存


    这是matlab当前的一个主要问题,据我所知,除了重新启动matlab之外,没有解决方案,这很遗憾。

    请提供一些代码,并告诉我们您使用的是什么matlab解释器(包括版本)。+1。对于案例3,您不需要重新启动。碎片发生在分配给Matlab进程的虚拟内存空间中;重新启动Matlab就足够了,谢谢你的澄清。如果我没记错的话,在WindowsNT(或者是Win95?)上,我们必须完全重新启动。我很高兴这个世界有进步!从文档中可以看出:“
    全部清除
    会降低代码性能,通常是不必要的”<代码>清除本身会从工作区中删除所有变量<代码>清除所有也会清除已加载的函数,然后需要再次加载这些函数。不要使用
    全部清除
    @CrisLuengo:我只在
    clear
    中添加了建议。在大多数实际应用中,性能的影响很小。
    pack
    相当于
    save;清楚的加载
    。因此,在
    清除所有
    后,它是无用的。