我的C mex编译文件内存不足(更具体地说,我对mxMalloc的调用有时会返回NULL).从快速计算我估计我的文件总共要求mxMalloc大约500 MB内存(可能多达1 GB),并且我在64位
Linux机器上运行我的文件,其中16 GB内存几乎完全运行Matlab.但是,mxMalloc经常返回NULL.
我想有几个原因导致这种情况发生(内存碎片等),但无论如何,500 MB在16 GB内存机器上似乎没有那么多要求.
我假设我对mxMalloc的调用从Matlab的堆请求内存,但我不是100%肯定它(mxMalloc请求毕竟是由Matlab处理的,而不是直接由OS处理).那么有没有办法增加我的mex文件的“堆”大小?
谢谢
最佳答案 您可以使用malloc(而不是mxMalloc),但必须手动管理内存(例如,您必须免费调用;它不像mxFree那样是可选的).您还可以尝试使用c和boost的共享/作用域指针进行编译.你的mexFunction签名将需要extern“C”.
您可能内存不足的一个原因是您的阵列太长.mxArray必须是连续的数据.所以mxMallocing他们和mxFreeing他们可能会破坏你的内存空间.虽然std :: vector也必须是连续的,但std :: list不一定是.
像原版STL的绳索类也可以是一个很好的实现.