본문 바로가기
!?/C++

동적메모리 할당

by Where's my namespace 2012. 8. 11.

동적메모리 할당은 정말, 아주 유용하다.

배열의 경우 변수명을 크기하는 배열을 선언 할 수 없다. 그 변수가 const 형 이라면 가능하지만 일반적으론 안된다.

그때 사용할 수 있는 것이 바로 동적 메모리 할당이다.

여기서 우린 동적 메모리 할당이 무슨 의민가.  우선 메모리 할당은 말 그대로 메모리를 할당 하는 것이다.

쉽게 말해  "메모리 얼마 쓸거니까 줘. " 란 의미가 된다. 

그렇다면 동적은 무엇일까? 동적의 의미를 알기 위해 정적 메모리 할당과 동적 메모리 할당의 차이를 알아보자.

 

우선 정적 메모리 할당의 경우 흔히 생각하는 변수 선언을 예로 들 수 있다. 정적 메모리 할당의 경우 프로그램이 시작

하기전에 메모리가 얼마인지 이미 계산되는 경우를 말한다.  그리고 메모리의 반납또한 함수가 끝나면 강제적으로 반납

된다.

 

동적 메모리 할당의 경우 메모리의 할달은 자유자제로 할 수 있고, 해제 또한 사용자 마음대로 할 수 있다.  정적 처럼

함수가 끝난다고 해서 할당된 메모리가 반납되지 않는다.

 

이것이 정적과 동적의 차이다.

이제 동적 메모리 할당의 사용법을 알아보자.

우선 동적 메모리 할당에는 2가지 명령어가 있다. 

new , delete 와 new[] , delete[] 이다.    이 두 명령어는 생김새 차이도 한끝 차이지만 실제 쓰이는 차이도 정말 한끝

차이다. 

 

new , delete 의 경우 단순 변수에 명령어를 선언 할 때 사용된다.  쉽게 예제를 보자.

 

int* ptr = new int; 

 

와 같이 단순 변수 정도의 크기를 할당하는데 사용된다. 

 

new[] 의 경우는 배열크기의 메모리 할당을 하는데 사용된다. 예제를 보자.

 

int* ptr = new int[size];

 

이 경우는, ptr 변수에 size 크기를 가지는 배열을 만드는 것과 같은 의미가 된다.   이것이 new 와 new[] 의 차이다. 

 

그렇다면 delete 는 무슨 명령어인가.   이 명령은 new 로 할당된 메모리를 해제할때 사용한다.   예를 보면

 

delete ptr; 

 

과 같이 사용하면 된다.     반대로 new[] 로 메모리를 할당 했다면 ,

 

delete[] ptr;

 

로 사용 하면 된다. 이 차이다.  하지만 중요한건 new 로 할당한건 반드시 delete 로 해제 해야하고,  new[] 로 할당된건

 

delete[] 로 해제해야한다.   

'!? > C++' 카테고리의 다른 글

클래스 1  (0) 2012.08.16
문자열(string)  (1) 2012.08.12
함수의 포인터  (0) 2012.08.11
함수의 재귀호출  (0) 2012.08.11
함수  (0) 2012.08.11