_freea
Освобождает блок памяти.
void _freea(
void *memblock
);
Параметры
- memblock
Ранее выделенный блок памяти, который необходимо освободить.
Возвращаемое значение
Нет.
Заметки
Функция _freea освобождает блок памяти (memblock), который был выделен ранее вызовом _malloca. _freea проверяет, была ли выделена память в куче или в стеке. Если была выделена в стеке, _freea не выполняет никаких действий. Если была выделена в куче, число освобожденных байтов эквивалентно запрошенному при выделении блока количеству байтов. Если memblock имеет значение NULL, указатель не обрабатывается и _freea немедленно возвращает управление. Попытка освободить недопустимый указатель (указатель на блок памяти, который не был выделен _malloca) может повлиять на последующие запросы на выделение и вызывать ошибки.
_freea вызывает free внутри, если обнаружит, что память выделена в куче. Определение расположения памяти (в куче или в стеке) осуществляется с помощью маркера, размещенного в памяти по адресу непосредственно перед выделенной памятью.
При возникновении ошибки освобождения памяти, в errno заносятся данные операционной системы, которые объясняют причину ошибки. Для получения дополнительной информации см. errno, _doserrno, _sys_errlist, and _sys_nerr.
После освобождения блока памяти, _heapmin минимизирует объем свободной памяти в куче путем объединения неиспользуемых областей и передачи их обратно операционной системе. Освобожденная память, которая не возвращена операционной системе, возвращается в пул свободной памяти и снова доступна для выделения.
Вызов _freea должен сопровождать все вызовы _malloca. Вызов _freea дважды для одной и той же памяти является ошибкой. Когда приложение скомпоновано с отладочной версией библиотеки времени выполнения C, особенно с возможностями _malloc_dbg, активированными определением _CRTDBG_MAP_ALLOC, проще найти отсутствующие или дублированные вызовы _freea. Дополнительные сведения о том, как происходит управление кучей в процессе отладки см. в разделе Отладочная куча CRT.
_freea помечена как __declspec(noalias); это означает, что функция гарантировано не изменяет глобальные переменные. Дополнительные сведения см. в разделе noalias.
Требования
Функция |
Обязательный заголовок |
---|---|
_freea |
<stdlib.h> и <malloc.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость во введении.
Пример
См. пример в разделе _malloca.
Эквивалент в .NET Framework
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.