[ C++ ] 정적할당, 동적할당

#1 메모리 할당

데이터를 사용하려면 메모리에 올려야한다. 메모리에 올리려면 공간부터 할당을 받아야한다. 스택 메모리에 할당받는 방식을 정적할당, 힙 메모리에 할당받는 방식이 동적할당이다.

#2 정적할당

정적할당 사용법

MyObj o = MyObj(); // 정적할당

변수에 객체나 데이터를 저장하는 방식은 대부분 정적할당 방식이다. 정적할당시 객체, 구조체, 혹은 데이터 그 자체를 반환받는다. 즉, 변수에는 데이터 자체가 저장된다.

정적할당 사용이유

정적할당을 할 경우 스택 메모리에 올라간다. 스택 메모리에 올라간 데이터는 포인터의 도움을 받지 않은 이상에는 스코프를 벗어나서 사용할 수 없다. 즉, 정적할당은 사용되는 스코프가 한정되어 있는 경우, 예를 들어 함수나 객체 내부와 같이 지역변수로 사용할 때처럼 일시적으로 쓰는 경우에 쓰인다.

#3 동적할당

동적할당 사용법

동적할당은 정적할당과 달리 new 연산자를 사용한다.

MyObj *o = new MyObj(); // 동적할당

new 연산자는 데이터가 필요한 메모리를 힙에서 할당 받은 후, 데이터, 객체, 구조체를 생성한 후에 그 주소를 반환한다. 따라서 포인터로 값을 반환받아야한다.

delete o; // 메모리해제

하지만 동적할당을 받은 경우에 반드시 메모리를 해제해줘야한다. 안그러면 메모리 누수가 일어난다.

동적할당 사용이유

동적할당 시 힙 메모리에 올라간다. 힙 메모리에 있는 경우에 포인터를 사용하면 어느 영역에서든 해당 데이터에 접근 가능하다. 즉, 영역에 상관없이 사용해야할 데이터의 경우에 동적할당을 사용한다.