본문 바로가기

C++

[12] 동적 메모리 확보

728x90

동적 메모리 확보

변수를 사용하면 프로그램이 실행되면서 지역변수, 전역변수의 종류에 따라 자동으로 메모리가 확보됩니다.

하지만, 사용자는 new와 delete 키워드를 사용해 마음대로 메모리를 확보했다가 해제할 수 있습니다.

 

new

먼저, 메모리를 동적으로 확보하기 전에 메모리 주소를 담을 포인터 변수가 필요합니다. 포인터 변수의 타입은 확보하고자 하는 메모리의 타입과 같은 타입으로 선언합니다.

이렇게 메모리를 확보하였습니다.

 

일반 변수와 다르게 동적으로 확보한 메모리는 역참조(간접 참조 연산자)를 사용해서 값을 대입합니다.

제대로 대입했던 값이 출력됩니다.

 

delete

동적으로 확보한 메모리는 다른 변수들과 달리 자동으로 해제되지 않기 때문에 가만히 놔두면 메모리를 끝없이 잡아먹습니다.

따라서 사용이 끝나면 메모리를 해제해 주도록 합시다. 해제할 때는 포인터 변수를 적어서 해제합니다.

 

배열 동적 메모리 확보

대표적으로 동적 메모리 확보가 쓰이는 곳은 배열입니다.

우리는 보통 배열을 선언할 때 메모리가 부족하면 안되기 때문에 넉넉하게 크기를 잡습니다. 

하지만, 이 방법은 메모리가 남아서 낭비가 될 가능성이 높습니다.

따라서, 동적 메모리 확보를 통해 낭비되는 메모리를 줄일 수 있습니다.

위의 이미지에서 num 변수를 사용해 num값 크기 만큼의 메모리를 확보한 뒤, delete[ ]를 사용해서 메모리를 해제했습니다.

 

메모리 영역

변수의 종류에 따라 메모리가 확보되는 영역이 다릅니다.

지역변수, 함수의 인수 => 스택

전역변수, 정적 변수(static) => 정적 메모리 영역

동적 확보된 메모리 => 힙(동적 메모리 영역)

728x90

'C++' 카테고리의 다른 글

[14] typedef, 구조체, 공용체  (0) 2021.05.01
[13] 파일 분할  (0) 2021.05.01
[11] 스코프와 기억수명  (0) 2021.04.30
[10] 배열  (0) 2021.04.30
[9] 레퍼런스와 인수(그리고 다수의 포인터 선언)  (0) 2021.04.29