Coding/Basic

[DataStructures] 정적/동적 메모리 할당 간단 개념

이 글은 학교 강의(이상호 교수님의 '자료구조')를 듣고 공부 목적차원에서 정리한 글입니다.

 

메모리 할당은 프로그램 자체가 컴퓨터에서 메모리를 할당 받는 것이기에 선언을 하지 않으면 메로리가 할당되지 않아 에러가 뜨는 경우가 발생하여 필수적인 방법입니다.

 

메모리를 할당받는 방법은 두가지가 있습니다.

1. 정적 메모리 할당

2. 동적 메모리 할당

 

1. 정적 메모리 할당

이는 메모리의 크기가 프로그램이 시작하기 전에 결정되는 것으로 프로그램의수행 도중에 크기가 변경될 수 없습니다. 가장 대표적인 예시는 변수나 배열의 선언을 들 수 있습니다. 먼저 선언을 하기에 뒤에서 malloc와 같은 함수를 불러서 할당할 필요가 없습니다.

ex. int buffer[100]; 아니면 char name[] = "data structures"

 

2. 동적 메모리 할당

프로그램의 실행 도중 메모리를 할당 받는 것으로 필요할 때 필요한 만큼 할당을 받아 사용하고, 필요없으면 반납할 수 있는 유연한 방식으로 진행됩니다. 메모리를 효율적으로 사용할 때 많이 필요합니다.

동적으로 메모리를 할당받는 것에 관련된 함수는 3가지로 나뉘어져 있습니다.

  • malloc(size) // 메모리를 할당 받을 때

  • free(ptr) //메모리를 반납할 때

  • sizeof(var) //메모리 크기 알고 싶을 때(바이트 단위)

적용되는 예제를 살펴보겠습니다.

 

malloc(size)는 size부분에 할당하고자하는 크기를 집어넣어 받게 됩니다. 이 때 sizeof(var)함수를 사용하게 됩니다.

char *a = (char *) malloc(100); //100바이트 할당
int *b = (int *) malloc(sizeof(int)); //정수 1개에 대한 메모리 확보
struct Book *c = (struct Book *) malloc(sizeof(struct Book)); //구조체 book 에 관한 메모리 확보

free(ptr)은 ptr, 즉 포인터가 가르키는 할당된 메모리 블럭을 해체하도록 합니다.

free(a);
free(b);
free(c);