현승일 교수
14주차 2강. 동적 메모리 할당
학습내용
학습목표
1. 동적 메모리 할당
2. 동적 메모리 할당 함수
1. 동적 메모리 할당에 대해 설명할 수 있다.
2. 동적 메모리 할당 함수에 대해 설명할 수 있다.
◉
동적 메모리 할당
1. 동적 메모리 할당(1)
• 등장배경
- 전역변수와 지역변수로 해결되지 않는 상황의 해결책
“함수가 매번 호출될 때마다 새롭게 할당되고 또 함수를 빠져나가도 유지가 되는 유형의 변수” 가 필요
(힙 영역 활용)
- 배열의 단점 보완 : 배열은 가장 클 것으로 예상되는 크기로 선언됨 (메모리 낭비)
→ 동적 메모리 할당으로 프로그램 실행 시 필요할 때마다 메모리를 할당
◉
동적 메모리 활용
1. 동적 메모리 할당(2)
• 컴파일 과정이 아닌 런타임에서 이루어짐
• 포인터 변수를 통해서만 접근 가능
• 힙(Heap)에 할당됨. <stdlib.h> 선언하여야 함
• 연결리스트와 큐, 스택, 이진 트리 등 자료구조를 체계적이고, 논리적으로 구현하는 알고리즘에서 일반적으로 사용
• ‘프로그래머가 관리하는 메모리 공간’
→ 프로그래머가 malloc() 할당한 메모리는 명시적으로 free() 함수로 해제해 주지 않으면 계속 남아 있음
◉
지역변수 및 전역변수 활용
1. 동적 메모리 할당(3)
◉
malloc 함수
2. 동적 메모리 할당 함수(1)
void *malloc(size_t size);
• malloc () 함수의 인수로 크기(byte 단위)를 넘겨주면 운영체제에서는 비어있는 영역을 할당해 그 시작주소를 반환해 줌
• malloc() 함수가 메모리를 할당 받을 수 없는 상태라면 NULL 값을 반환함
• 메모리 할당은 void 형태로 크기만 지정하고, 사용 시에 형 지정
2. 동적 메모리 할당 함수(2)
◉
malloc() 함수 활용
◉
calloc() 함수
2. 동적 메모리 할당 함수(3)
void *calloc(size_t num_elements, size_t elements_size);
• num_elements * elements_size 만큼의 크기를 할당하면서, 할당된 공간을 자동으로 0으로 초기화 함
• 이런 초기화가 편리하기도 하지만 메모리를 사용하기 전에 미리 할당 받은 메모리에 항상 값을 저장하는 프로그램이라면 이런 과정이 오히려 시간낭비가 될 수 있음
◉
realloc() 함수
2. 동적 메모리 할당 함수(4)
void *realloc(void *ptr, size_t size);
• 이미 할당되어 있는 영역을 다시 size 만큼 재할당하여 새로운 영역의 시작주소를 반환함. 기존데이터를 보장해줌
◉
free() 함수
2. 동적 메모리 할당 함수(5)
void *free(void *ptr);
• free() 함수의 인수는 malloc(), calloc(), realloc() 호출에서 반환 받는 값, 즉 메모리 주소이어야 함
• 이 함수는 할당 받은 영역을 해제하고, 이렇게 해제된 기억 장소는 다음의 동적 할당 요청에 다시 할당해 사용될 수 있음
• 할당된 공간의 일부만을 해제할 수 없음
정리하기
1. 동적 메모리 할당
- 컴파일 과정이 아닌 런타임에서 이루어짐 - 포인터 변수를 통해서만 접근 가능
- 힙(Heap)에 할당됨. <stdlib.h> 선언하여야 함
2. 동적 메모리 할당 함수
void *malloc(size_t size);
void *calloc(size_t num_elements, size_t elements_size);
void *realloc(void *ptr, size_t size);
void *free(void *ptr);
다음시간에는…
에 대해 학습해 보겠습니다.
참고문헌