MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   在Matlab中为mex程序提供更多内存 (https://www.labfans.com/bbs/showthread.php?t=26207)

poster 2019-12-14 20:13

在Matlab中为mex程序提供更多内存
 
我的C mex编译文件内存不足(更具体地说,我对mxMalloc调用有时返回NULL )。通过快速计算,我估计我的文件mxMalloc要求mxMalloc约500 MB的内存(可能多达1 GB),并且我在64位Linux计算机上运行文件,而16 GB的内存几乎专门运行Matlab。但是, mxMalloc经常返回NULL 。

我猜可能有多种原因会导致这种情况发生(内存碎片等),但是无论如何,对于16 GB内存的机器来说,500 MB似乎并不是什么大问题。

我假设我对Matlab堆中的mxMalloc请求的调用是从内存中获取的,但是并不能100%地确定( mxMalloc Matlab处理了mxMalloc请求,而不是直接由OS处理)。那么,有没有办法增加我的mex文件的“堆”大小?

谢谢



[B]回答:[/B]

您可以使用malloc (不是mxMalloc ),但是必须手动管理内存(例如,您[I]必须[/I]调用free ;它不是mxFree那样的可选项)。您也可以尝试使用c ++和boost的共享/作用域指针进行编译。您的mexFunction签名将需要在其前面加上extern "C" 。

内存不足的原因之一可能是阵列太长。 mxArray必须是连续数据。所以mxMalloc荷兰国际集团他们和mxFree荷兰国际集团可能他们的分段存储空间。尽管std :: vector也必须是连续的,但std :: list不必一定是连续的。

像原始STL的rope类之类的东西也可以很好地实现。



[url=https://stackoverflow.com/questions/4764718]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 23:21

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.