_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 运行时库的调试版本链接时,特别是与通过定义 _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