mxFree(C 和 Fortran)
释放由 mxCalloc、mxMalloc、mxRealloc、mxArrayToString 或 mxArrayToUTF8String 函数分配的动态内存
C 语法
#include "matrix.h" void mxFree(void *ptr);
Fortran 语法
#include "fintrf.h" subroutine mxFree(ptr) mwPointer ptr
参量
ptr指向由
mxCalloc、mxMalloc或mxRealloc分配的任何内存块开头的指针。如果ptr是NULL指针,该函数不执行任何操作。
描述
mxFree 使用 MATLAB® 内存管理设施释放堆空间。此函数确保在错误和中止 (Ctrl+C) 情况下的正确内存管理。
要在 C MATLAB 应用程序中释放堆空间,请调用 mxFree 而不是 ANSI® C free 函数。
在 MEX 文件(但不包括 MAT 或引擎独立应用程序)中,MATLAB 内存管理设施维护由以下函数分配的所有内存的列表:
mxCallocmxMallocmxReallocmxArrayToStringmxArrayToUTF8String
当 MEX 文件完成且控制权返回给 MATLAB 提示符时,内存管理设施会自动释放由 MEX 文件管理的所有内存块。mxFree 还会从内存管理的内存块列表中删除该内存块。
当 mxFree 出现在 MAT 或引擎独立 MATLAB 应用程序中时,它只是释放从地址 ptr 开始的连续堆空间。
在 MEX 文件中,您对 mxFree 的使用取决于指定的内存块是持久性的还是非持久性的。默认情况下,由 mxCalloc、mxMalloc、mxRealloc、mxArrayToString 和 mxArrayToUTF8String 创建的内存块是非持久性的。每当 MEX 文件完成时,内存管理设施会自动释放所有非持久性内存。因此,即使您不调用 mxFree,MATLAB 也会负责为您释放内存。不过,当不再使用内存时将其释放是良好的编程做法。这样做通常可以使整个系统的运行更高效。
如果应用程序调用 mexMakeMemoryPersistent,则指定的内存块会变为持久性的。当 MEX 文件完成时,内存管理设施不会释放持久性内存块。因此,释放持久性内存块的唯一方式是调用 mxFree。通常,MEX 文件调用 mexAtExit 以注册一个清理处理程序。该清理处理程序调用 mxFree。
不要对由 Matrix Library API 中任何其他函数创建的 mxArray 使用 mxFree。请改用 mxDestroyArray。
示例
要打开示例,请输入:
edit([fullfile(matlabroot,"extern","examples","mx","filename")]);
其中,filename 为:
要打开示例,请输入:
edit([fullfile(matlabroot,"extern","examples","refbook","filename")]);
其中,filename 为:
要打开示例,请输入:
edit([fullfile(matlabroot,"extern","examples","mex","filename")]);
其中,filename 为:
另请参阅
mexAtExit, mexMakeArrayPersistent, mexMakeMemoryPersistent, mxCalloc, mxDestroyArray, mxMalloc, mxRealloc, mxArrayToString, mxArrayToUTF8String
版本历史记录
在 R2006a 之前推出