본문 바로가기
C

메모리의 동적 할당(dynamic allocation)[C언어개발]

by cellin 2023. 11. 11.

데이터 영역과 스택 영역의 메모리의 크기는 컴파일 타임(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);
 

 

 

 

 

 

 

사진: UnsplashGeorge Tasios

728x90
반응형