我的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文件的“堆”大小?
由于
答案 0 :(得分:2)
您可以使用malloc
(不是mxMalloc
),但必须手动管理内存(例如,您必须调用free
;它不是mxFree
的可选内容1}}是。您还可以尝试使用c ++和boost的共享/作用域指针进行编译。您的mexFunction
签名需要extern "C"
前缀。
您可能内存不足的一个原因是您的阵列太长。mxArray
必须是连续的数据。所以mxMalloc
他们和mxFree
他们可能会破坏你的记忆空间。虽然std :: vector也必须是连续的,但std :: list不一定是。
原始STL的rope
类之类的东西也可以是一个很好的实现。