왜 동적할당 해야하는가?
1.
일반적으로 프로그램을 실행하게 되면 RAM에 메모리를 차지하게 된다.
그런데 만약, 잠깐 프로그램 사용하고 그 이후에는 사용하지 않을꺼라면? RAM에서 사라지게 하는 것이 좋다!
따라서, 사용할 때만 메모리를 할당하고 필요가 없어지면 메모리를 해지하게 해야 할 필요성이 생긴다.
2.
일반적인 변수나 함수의 경우 stack에 저장되는데, 이 경우 범위를 벗어나면 사용할 수 없다는 단점이 있다.
동적할당의 경우 heap에 저장하기 떄문에 이러한 제한 조건으로부터 자유로울 수 있다.
함수 리턴 이후에도 메모리 할당을 남겨도어 변수를 사용할 수 있게끔 해준다.
#include <iostream>
int main ()
{
int * p = new int;
*p = 1303;
std::cout << *p << std::endl;
delete p; //singel 변수에 대한 delete
return 0;
}
C++
복사
int 크기의 공간을 heap에 할당하고 이 것의 주소값을 포인터 p에 넣는다.
일반적인 경우, 배열을 선언하기 위해서는 배열의 크기를 컴파일 전에 정해야 하지만,
동적할당을 이용한다면 그럴 필요가 없다. 런타임에서 배열의 크기를 정해줄 수 있다.
#include <iostream>
int main ()
{
int dynamic_array_size = 0;
std::cout << "Length of dynamic array : " << std::endl;
std::cin >> dynamic_array_size;
double * array = new double[dynamic_array_size];
for (int i = 0; i < dynamic_array_size; i++)
array[i] = i+2;
for (int i = 0; i < dynamic_array_size; i++)
std::cout << array[i] << std::endl;
delete[] array; //array 타입 변수에 대한 delete
return 0;
}
C++
복사
위의 과정이 동일하게 array 타입에도 적용된다.