동적할당이란?
데이터 영역과 스택 영역에 할당되는 메모리의 크기는 컴파일 타임(compile time)에 미리 결정됩니다.
하지만 힙 영역의 크기는 프로그램이 실행되는 도중인 런 타임(run time)에 사용자가 직접 결정하게 됩니다.
이렇게 런 타임에 메모리를 할당받는 것을 메모리의 동적 할당(dynamic allocation)이라고 합니다.
malloc() 함수
#include <stdlib.h> void *malloc(size_t size); |
- 할당하고자하는 메모리 크기를 바이트 단위로 전달받는다.
- 함수가 실행되면 메모리공간을 찾는다.
- 이렇게 찾은 메모리공간의 첫번째 바이트 공간을 가리키는 주솟값을 반환한다.
- 공간을 찾지 못할 경우 널포인터를 반환한다.
- 주솟값을 반환받기 떄문에 메모리공간에 접근하려면 포인터를 사용해야한다.
- free()함수를 통해 할당받은 메모리를 해제해주어야한다.
calloc() 함수
#include <stdlib.h> void *calloc(size_t nmemb, size_t size); |
- 메모리 크기를 두개의 인수로 나누어 전달받는다.
- 메모리를 할당받은 후에 해당 메모리의 모든 비트값을 전부 0으로 초기화해준다.
- 첫번쨰 인수는 메모리 블록의 개수, 두번째 인수는 각 블록의 바이트 수이다.
예시
1. ptr_arr = (int*) malloc(arr_len * sizeof(int)); 2. ptr_arr = (int*) calloc(arr_len, sizeof(int)); |
위의 예제는 똑같은 동작을 수행한다.
개념 [참조]