【发布时间】:2015-02-05 16:39:28
【问题描述】:
我在为 Matlab 编译的 MEX/C 代码中有一个奇怪的情况。我使用malloc(...) 进行动态内存分配,并调用free(...) 来释放此内存。退出 MEX 例程后,我可以看到分配的内存根本没有释放。另一方面,如果我使用 mxMalloc(...) 和 mxFree(...) 一切都很好。如果我照顾free(...),我假设malloc(...) 的使用不是禁止的。在 Matlab 规范中,我找不到任何关于拦截或阻止基本 C 库的信息。虽然有一些关于它的奇怪帖子,比如Matlab Central。
【问题讨论】:
-
“退出 MEX 例程后,我可以看到分配的内存根本没有释放”——是什么让你这么认为?
-
我可以通过查看 Matlab 进程在我的系统监视器 (Linux) 中看到它。在我的
MEX代码中,我创建了 BIG 矩阵,每次我看到为这些矩阵分配的 100+ MB 都被 Matlab 进程保留。 -
我认为你必须展示一些代码。重现问题的最小示例。
-
您可以在此处找到代码:mathworks.com/matlabcentral/fileexchange/… 并解决内存问题,我已将
free(...)和malloc(...)替换为mxFree(..)和mxMalloc()。
标签: c++ c matlab memory-management mex