Share via


_freea

解除分配或释放内存块。

void _freea( 
   void *memblock 
);

参数

  • memblock
    释放之前分配的内存块。

返回值

无。

备注

_freea 函数解除分配之前通过调用_malloca、或者 分配的存储区 (memblock)。 _freea 检查内存是否在堆或堆栈分配。 如果在堆栈分配,_freea 不执行任何操作。 如果它在堆中分配所释放的字节数与请求的字节数等效,则块分配情况。 如果 memblock 为 NULL,则忽略指针并且立即返回 _freea 。 尝试释放一个无效指针 (指向未由 _malloca,或 分配的存储区的指针) 可能会影响后续分配请求并导致错误。

_freea 内部调用 free,如果它发现中存在堆分配。 内存是否在堆或堆栈取决于内存中的标记在紧接在分配的内存中的地址。

如果在释放内存时发生错误,则将 errno 设置为操作系统故障的特性信息。 有关详细信息,请参阅errno、_doserrno、_sys_errlist 和 _sys_nerr

在释放存储区后,_heapmin 通过关联未使用的区域和释放它们回操作系统来减少在堆中释放内存的数量。 未释放给操作系统释放的内存被恢复到空闲池并且可再供分配一次。

对 _freea 的调用必须随附的所有调用 _malloca。 它也是调用两次 _freea 的错误在同一内存。 当应用程序链接 C 运行库的调试版本时,尤其是与 _malloc_dbg 功能通过定义 _CRTDBG_MAP_ALLOC启用,查找缺少或重复的 _freea调用。更容易。 有关在调试过程中如何托管堆的详细信息,请参阅 The CRT Debug Heap

_freea 是标记的 __declspec(noalias),这意味着函数可确保不修改全局变量。 有关详细信息,请参阅noalias

要求

功能

必需的标头

_freea

<stdlib.h> 和 <malloc.h>

有关更多兼容性信息,请参见“简介”中的兼容性

示例

请参见 _malloca中的示例。

.NET Framework 等效项

不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见平台调用示例

请参见

参考

内存分配

_malloca

calloc

malloc

_malloc_dbg

realloc

_free_dbg

_heapmin