기계는 거짓말하지 않는다

free 함수의 할당된 메모리 크기 판별 본문

C

free 함수의 할당된 메모리 크기 판별

KillinTime 2021. 5. 10. 10:15

malloc 동적 할당 후 free 함수 호출 시 어떻게 크기를 알고 할당 해제를 하는지 궁금했던 적이 있었다.

#include <stdio.h>
#include <stdlib.h>

int main() {
	int* arr = (int*)malloc(sizeof(int) * 10);
	int i;

	for (i = 0; i < _msize(arr) / sizeof(int); i++) {
		arr[i] = i + 1;
		printf("%d ", arr[i]);
	}
	puts("");

	free(arr);		// sizeof(int) * 10 만큼 해제
	puts("메모리 할당 해제");
}

콘솔 실행 화면

위와 같은 코드 실행 후 free를 호출할 때 어떻게 크기를 판별하는지 찾아보았다.

결론은 동적 메모리 할당을 사용할 때 힙 영역에서 수행 되고, 실제 요청 된 크기보다 더 크게 만들어진다.

이는 블록의 크기를 기록하는 추가 정보를 포함한다고 한다. (stackoverflow의 내용)

 

실제 할당 블록
헤더 데이터
  └> 리턴 주소    

 

'C' 카테고리의 다른 글

힙 정렬(Heap Sort)  (0) 2021.08.29
typedef 선언  (0) 2021.05.27
이중 연결 리스트(Doubly Linked List)  (0) 2021.04.25
링크드 리스트(Linked List)  (0) 2020.12.12
원형 큐(Circular Queue)  (0) 2020.12.09
Comments