主要内容

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

指向由 mxCallocmxMallocmxRealloc 分配的任何内存块开头的指针。如果 ptrNULL 指针,该函数不执行任何操作。

描述

mxFree 使用 MATLAB® 内存管理设施释放堆空间。此函数确保在错误和中止 (Ctrl+C) 情况下的正确内存管理。

要在 C MATLAB 应用程序中释放堆空间,请调用 mxFree 而不是 ANSI® C free 函数。

在 MEX 文件(但不包括 MAT 或引擎独立应用程序)中,MATLAB 内存管理设施维护由以下函数分配的所有内存的列表:

  • mxCalloc

  • mxMalloc

  • mxRealloc

  • mxArrayToString

  • mxArrayToUTF8String

当 MEX 文件完成且控制权返回给 MATLAB 提示符时,内存管理设施会自动释放由 MEX 文件管理的所有内存块。mxFree 还会从内存管理的内存块列表中删除该内存块。

mxFree 出现在 MAT 或引擎独立 MATLAB 应用程序中时,它只是释放从地址 ptr 开始的连续堆空间。

在 MEX 文件中,您对 mxFree 的使用取决于指定的内存块是持久性的还是非持久性的。默认情况下,由 mxCallocmxMallocmxReallocmxArrayToStringmxArrayToUTF8String 创建的内存块是非持久性的。每当 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 为:

版本历史记录

在 R2006a 之前推出