2010년 2월 5일 금요일

new와 malloc의 차이점

프로그래밍 언어로 C를 접한건 대학교 1학년 1학기 때였고,

C라는 것을 정확히 알지도 못한 상태에서 1학년 2학기 때에 C++를 배우게 되었다.

그러다 보니 실제로 C에 대한 개념은 그렇게 많지 않은 상태이고, C++ 도 머 별반 다르지 않았다.

STL 같은 경우도 병특이 끝나고 한참 공부하기도 했었지만, 실제로 써본 경험은 그렇게 많지 않고..

boost의 경우는 존재에 대해서만 알뿐 써보기는 커녕 공부조차 거의 하지 않은 실정.

대학 졸업 후에는 구현된 엔진에서 제공하는 것들만 사용하다 보니......

면접을 보면서 많이 느끼고 있다. 3D는 그렇다 치고, C++에 대한 내공도 많이 부족하구나..

 

그래서 지금부터라도 내공을 좀 쌓아야겠다는 생각이 들어

남들에게는 우스워 보일지 모르는 것들이지만, 내가 모르는 것들을 익혀보고자 한다.

 

그 첫번째가 new와 malloc의 차이점.

new/delete가 한짝 malloc/free가 한짝 이라는 건 알고 있는 내용이고.

new[] 일때는 / delete[]를 써줘야 한다는 것도 기본 사항.

 

그렇다면 정확하게 new와 malloc의 차이점은 멀까?

 

1. new는 연산자(operator)이고 malloc은 함수이다.

 

2. malloc()함수는 C에서 제공하는 함수이므로 C/C++에서 모두 사용가능하지만,

new 연산자는 C++ 에서만 사용가능하다.

 

3. malloc()의 경우는 할당된 메모리의 포인터를 리턴하므로 원하는 자료형으로 형변환을 해줘야 하지만, new 연산자의 경우는 new 다음에 자료형을 기술하므로 할당받은 메모리에 사용될 자료형을 알 수 있어 리턴하는 주소도 원하는 자료형에 맞춰 형변환을 진행해준다.

 

4. 1에서 밝힌 차이점에서 오는 것으로 malloc은 함수이므로 할당받고 싶은 메모리의 바이트 수를 인자로 넘겨주어야 하지만, new는 그렇지 않다.

 

5. new 연산자를 통해 동적으로 객체의 메모리를 할당받는 경우는 객체의 생성자의 호출이 이루어져 객체의 초기화가 이루어지는 반면에 malloc의 경우는 단순히 객체만 생성하므로 따로 초기화를 진행해 주어야 한다.

 

6. 5와 마찬가지로 pair인 delete는 동적으로 할당된 객체의 메모리를 해제할 경우 객체의 소멸자가 자동으로 호출 되지만, free()는 그렇지 않다.

 

생각보다 많은 차이점이 있다.

읽어보면 당연한 것들이지만 막상 차이점을 말하라고 했을땐 적을 수 있는게 몇개 없었다..

기술 면접이 그래서 준비를 안하면 막막하다.. -0-;;