4

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

我想这可能有几个原因(内存碎片等),但无论如何,对于 16 GB 内存的机器来说,500 MB 的要求似乎并不高。

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

谢谢

4

1 回答 1

2

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

您可能内存不足的一个原因是您的数组太长了。mxArray必须是连续数据。所以mxMallocing 他们和mxFreeing 他们可能会分散你的记忆空间。虽然 std::vector 也必须是连续的,但 std::list 不必是连续的。

像原始 STL 的rope类这样的东西也可能是一个很好的实现。

于 2011-01-22T01:35:54.690 回答