在Matlab中为mex程序提供更多内存

时间:2011-01-21 22:58:17

标签: c matlab mex

我的C mex编译文件内存不足(更具体地说,我对mxMalloc的调用有时返回NULL)。从快速计算我估计我的文件要求mxMalloc总共大约500 MB内存(可能高达1 GB),并且我在运行Matlab的16 GB内存的64位Linux机器上运行我的文件几乎完全。然而,mxMalloc经常返回NULL

我想有几个原因可能会发生这种情况(内存碎片等),但无论如何,从16 GB的内存机器来看,500 MB似乎没那么多。

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

由于

1 个答案:

答案 0 :(得分:2)

您可以使用malloc(不是mxMalloc),但必须手动管理内存(例如,您必须调用free;它不是mxFree的可选内容1}}是。您还可以尝试使用c ++和boost的共享/作用域指针进行编译。您的mexFunction签名需要extern "C"前缀。

您可能内存不足的一个原因是您的阵列太长。mxArray必须是连续的数据。所以mxMalloc他们和mxFree他们可能会破坏你的记忆空间。虽然std :: vector也必须是连续的,但std :: list不一定是。

原始STL的rope类之类的东西也可以是一个很好的实现。