- thebaleuncoding
동적 메모리 할당(Dynamic memory allocation)이 왜 필요할까요?

프로그램이 실행되려면 메모리가 필요합니다.
메모리에 실행 파일이 로드되어야 실행될 수 있고,
프로그램 작업을 위해 선언하는 모든 변수들도 메모리에 할당됩니다.
메모리를 할당하는 방법에는 동적 메모리 할당(Dynamic memory allocation)과
정적 메모리 할당(Static memory allocation)이 있습니다.
정적 메모리 할당은 프로그램 작성 단계에서 필요한 기억 공간의 크기를 결정합니다.
일반적으로 배열을 선언할 때 정적 메모리 할당 방법을 사용합니다.
(char examples[10];)
위와 같이 프로그램을 작성하면 char 자료형 10개가 나란히 선언되고,
examples 배열에는 10개의 자료형만 들어갈 수 있습니다.
프로그램에서 아래와 같은 변수들을 사용한다고 가정해보겠습니다.
int Score;
double Rate;
컴파일러가 이 두 변수들이 값을 제대로 보관하도록 변수 타입에 맞는 크기만큼 메모리 할당을 할 것입니다.
Score 변수는 정수형이기 때문에 4바이트, Rate 변수는 실수형이기 때문에 8바이트가 할당됩니다.
이런식으로 프로그램을 작성할 때 미리 얼마만큼 메모리가 필요한지 알려주는 방법을
정적 메모리 할당(Static memory allocation)이라고 합니다.
동적 메모리 할당은 프로그램 실행 시간동안 사용할 메모리 공간을 할당하는 것입니다.
메모리 공간 필요시에 할당하고, 사용이 끝난 뒤 사용자가 원하는 시점에 원하는 크기만큼 반납이 가능합니다.
사용자에 의해 동적으로 할당된 메모리는 프로그램이 끝날 때까지 유지되기 때문에
메모리 공간 사용이 끝나면 메모리가 낭비되는 것을 줄이기 위해 명시적으로 메모리 할당을 해제해주어야합니다.
동적 메모리 할당이 필요한 이유
학교에서 학생 50명의 성적을 처리하는 경우에
다음과 같이 배열을 선언해서 정적 메모리 할당을 할 수 있습니다.
int arScore[50];
위와 같이 선언하면 50명의 성적을 저장할 수 있는 메모리 공간이 확보됩니다.
만약 학생 수가 1000명인 학교라면 1000으로 늘리면 되고,
그 이상이라면 필요한만큼 얼마든지 배열의 크기를 늘리면 됩니다.
하지만 프로그램 작성시에 메모리가 얼마나 필요한지 전혀 예측하지 못하는 경우가 있습니다.
이 성적 처리 프로그램이 특정 학교만을 위한 것이 아닌
임의의 학교들에서 사용될 일반적인 응용 프로그램일 경우입니다.
일부 시골에는 전교생이 10명도 안 되는 학교가 있는 반면
어떤 학교는 한 반에만 학생이 30명인 학교도 있습니다.
그럼 배열의 크기를 5000만 정도로 충분하게 정적 할당하면 될까요?
#동적메모리할당이왜필요할까요?에 대해 더 알아보고 싶나요?
아래 링크로 이동하세요.