内存不足matlab运行时2015b

16次(最近30天)
兰德sertshuk
兰德sertshuk 2020年1月13日
回答: binh232942021年8月28日
嘿,我在32位windows pc上工作,运行matlab 2015b运行时,我试图通过编译它到点net DLL运行几个函数,然后从我的c#程序运行它。
我遇到了一个“内存不足”的matlab异常,我的c#程序仍然很好,pc有足够的空闲内存时运行它(超过1.6GB的空闲内存),算法+ MCR占用大约500- 600mb的内存。
我试图增加JVM堆大小,或改变运行时设置,但没有任何实际进展。
有人知道任何PC / matlab编译器/运行时设置,将帮助我解决这个问题吗?
ps在我的64位PC上运行这个(作为32位应用程序)我没有任何问题。
提前谢谢。

答案(2)

安德鲁Janke
安德鲁Janke 2020年1月31日
如果不知道你的程序在做什么操作,这很难说。但是由于您有很多剩余的空闲内存,您可能正在运行内存 碎片 问题而不是彻底的内存耗尽。当你分配一个Matlab数组时,它是从现有的内存空间中分割出来的。当您清除该数组时,内存被释放回池(在C malloc 级别)。但是,这个块不一定会与其他被释放的块合并,生成更大的块。如果随着时间的推移分配了很多数组,那么就会将内存分成小块,这样就不能再分配大的数组了,即使您总共有很多可用的内存。
matlab函数 内存() 会给你一些数据来帮助你诊断。让您的程序运行它并显示结果。查找“Maximum possible array”/“maxpossible raybytes”值。如果这比你可用的总内存小很多,那么你就有了碎片。
除非你得到的内存不足错误明确地说它是一个Java堆OOM(与常规OOM相反),不要麻烦弄乱你的Java设置;那没用的。
不幸的是,修复内存碎片需要首先修改代码来分配更少的数组。单元格字符串、字符串和包含许多小数组的单元格或对象是导致碎片的常见原因。切换到分类数组和表格会有很大帮助。
至于在64位操作系统上运行良好的32位应用程序:IIRC,在32位Windows上,操作系统为自己保留了虚拟内存的上半部分空间,因此用户程序只能使用2gb的RAM。但在64位的Windows上,这被删除了,所以32位的程序可以使用完整的4gb虚拟内存空间。这可能足够让你跨过这个门槛了。在那里 一个32位Windows上的内核设置来修改东西,让用户程序得到3gb而不是2gb,这也可能对你有帮助。(谷歌“Windows 3gb switch”详情)

binh23294
binh23294 2021年8月28日
我也有同样的问题。你解决了吗?
当我创建类MLDivide的新实例(从Matlab编译的程序集)时,这个实例占用了大约487mb内存

下载188bet金宝搏


释放

R2015b

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!