_freea

解除分配或释放内存块。

语法

void _freea(
   void *memblock
);

参数

memblock
要释放的以前分配的内存块。

返回值

无。

备注

_freea 函数释放以前通过调用 _malloca 分配的内存块 (memblock)。 _freea 检查以确定内存被分配到堆上还是堆栈上。 如果被分配到堆栈上,则 _freea 不执行任何操作。 如果被分配到堆上,则已释放的字节数等于分配块时请求的字节数。 如果 memblockNULL,会忽略指针并立即返回 _freea。 尝试释放无效指针(指向并非由 _malloca 分配的内存块的指针)可能会影响后续分配请求,并导致错误。

如果发现内存被分配到堆上,_freea 会在内部调用 free。 内存是在堆上还是在堆栈上由内存中的标记决定,该内存地址紧接所分配的内存。

如果在释放内存时发生错误,则根据操作系统中关于错误性质的信息设置 errno。 有关详细信息,请参阅errno, _doserrno, _sys_errlist_sys_nerr.

释放内存块后,_heapmin 通过合并未使用的区域并将其释放回到操作系统,将堆上的可用内存量降至最低。 未释放给操作系统的已释放内存还原到可用池,并且可用于重新分配。

调用 _freea 必须附带对所有对 _malloca 的调用。 在同一内存中调用 _freea 两次也是错误的。 当应用程序与 C 运行时库的调试版本链接时,特别是与通过定义 _freea 启用的 _malloc_dbg 功能链接时,更容易查找对 _CRTDBG_MAP_ALLOC 的遗漏或重复调用。 若要详细了解如何在调试过程中托管堆,请参阅 CRT 调试堆

_freea 标记为 __declspec(noalias),这表示该函数保证不会修改全局变量。 有关详细信息,请参阅 noalias

要求

函数 必需的标头
_freea <stdlib.h> 和 <malloc.h>

有关兼容性的详细信息,请参阅 兼容性

示例

请参阅 _malloca 的示例。

另请参阅

内存分配
_malloca
calloc
malloc
_malloc_dbg
realloc
_free_dbg
_heapmin