데이터 영역과 스택 영역의 메모리의 크기는 컴파일 타임(compile time)에 할당되는 것과 달리, 힙 영역의 크기는 프로그램이 실행되는 런 타임중에 결정되며, 이처럼 런 타임에 메모리를 할당받는 것을 메모리의 동적 할당(dynamic allocation)이라고 한다.
malloc() 함수
malloc() 함수는 프로그램이 실행 중일 때 사용자가 직접 힙 영역에 메모리를 할당
원형
#include <stdlib.h>
void *malloc(size_t size);
free() 함수
free() 함수는 힙 영역에 할당받은 메모리 공간을 다시 운영체제로 반환해 주는 함수
EXAMPLE
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i;
int arr_len = 3;
int* ptr_arr;
ptr_arr = (int*) malloc(arr_len * sizeof(int)); // 메모리 동적 할당
if (ptr_arr == NULL) // 메모리 동적 할당 실패할 경우
{
printf("메모리 동적 할당 실패\n");
exit(1);
}
printf("동적 할당받은 메모리의 초기값\n");
for (i = 0; i < arr_len; i++)
{
printf("%d ", ptr_arr[i]);
}
free(ptr_arr); // 동적 할당된 메모리 반환
return 0;
}
결과
동적 할당받은 메모리의 초기값
0 0 0
calloc() 함수
calloc() 함수는 malloc() 함수와 마찬가지로 힙 영역에 메모리를 동적으로 할당
** malloc() 함수와 다른 점: 할당하고자 하는 메모리의 크기를 두 개의 인수로 나누어 전달받음
원형
#include <stdlib.h>
void *calloc(size_t nmemb, size_t size);
realloc() 함수
realloc() 함수는 이미 할당된 메모리의 크기를 바꾸어 재할당할 때 사용하는 함수
원형
#include <stdlib.h>
void *realloc(void *ptr, size_t size);
사진: Unsplash의George Tasios
728x90
반응형
'C' 카테고리의 다른 글
문자 입출력 함수[C언어개발] (1) | 2023.11.11 |
---|---|
포인터란?[C언어개발] (0) | 2023.11.11 |
C언어 배열 생성하기-1차원,다차원[C언어개발] (0) | 2023.11.09 |
C언어 재귀 호출(recursive call)[C언어개발] (2) | 2023.11.09 |
C언어 함수(FUNCTION)[C언어개발] (1) | 2023.11.08 |