_freea
메모리 블록을 할당 해제하거나 해제합니다.
구문
void _freea(
void *memblock
);
매개 변수
memblock
해제할 이전에 할당된 메모리 블록입니다.
반환 값
없음.
설명
이 함수는 _freea
이전에 호출에 의해 할당된 메모리 블록(memblock
)의 할당을 취소합니다 _malloca
. _freea
는 힙 또는 스택에서 메모리가 할당되었는지 확인합니다. 스택에서 할당된 경우 _freea
는 아무 작업도 수행하지 않습니다. 힙에서 할당된 경우 해제된 바이트 수는 블록이 할당될 때 요청된 바이트 수와 일치합니다. 이 NULL
경우 memblock
포인터가 무시되고 _freea
즉시 반환됩니다. 잘못된 포인터(할당 _malloca
되지 않은 메모리 블록에 대한 포인터)를 해제하려고 하면 후속 할당 요청에 영향을 미치고 오류가 발생할 수 있습니다.
_freea
는 메모리가 힙에 할당된 것으로 확인되면 내부적으로 호출 free
됩니다. 메모리가 힙 또는 스택에 있는지 여부는 할당된 메모리 바로 앞 주소의 메모리에 배치된 표식에 의해 결정됩니다.
메모리 해제 중 오류가 발생하면 운영 체제에서 제공하는 실패 특성에 대한 정보를 바탕으로 errno
가 설정됩니다. 자세한 내용은 다음을 참조하세요.errno
, _doserrno
, _sys_errlist
및 _sys_nerr
.
메모리 블록이 해제 _heapmin
된 후 사용되지 않는 영역을 병합하고 운영 체제로 다시 해제하여 힙의 사용 가능한 메모리 양을 최소화합니다. 운영 체제에 릴리스되지 않은 해제된 메모리는 사용 가능한 풀로 복원되고 다시 할당할 수 있습니다.
_freea
를 호출하면 _malloca
에 대한 모든 호출이 함께 수행됩니다. 동일한 메모리에서 두 번 호출 _freea
하는 것도 오류입니다. 애플리케이션이 C 런타임 라이브러리의 디버그 버전과 연결된 경우, 특히 _malloc_dbg
정의 _CRTDBG_MAP_ALLOC
하여 사용하도록 설정된 기능을 사용하면 누락되거나 중복된 호출을 쉽게 찾을 수 있습니다 _freea
. 디버깅 프로세스 중에 힙을 관리하는 방법에 대한 자세한 내용은 CRT 디버그 힙을 참조하세요.
_freea
는 __declspec(noalias)
로 표시되면 함수는 전역 변수를 수정하지 않도록 보장되지 않습니다. 자세한 내용은 noalias
를 참조하세요.
요구 사항
함수 | 필수 헤더 |
---|---|
_freea |
<stdlib.h> 및 <malloc.h> |
호환성에 대한 자세한 내용은 호환성을 참조하세요.
예시
_malloca
에 대한 예를 참조하세요.
참고 항목
메모리 할당
_malloca
calloc
malloc
_malloc_dbg
realloc
_free_dbg
_heapmin