C++

malloc과 new의 차이

종황이 2020. 10. 24. 02:03

C++에서는 메모리 동적 할당을 위해 malloc과 new 둘 다 쓸 수 있습니다. 둘의 차이점에 대해 알아봤습니다.

 

 

1. malloc은 라이브러리 제공 함수로, stdlib.h 을 include 해주어야 사용 가능하지만, new는 기본으로 제공하는 키워드이므로 별도의 라이브러리 추가 없이 바로 사용 가능합니다.

 

2. malloc은 사이즈를 매개변수로 받고, 리턴타입이 void*형이므로 sizeof()와 캐스팅을 활용해야 쉬운 코딩이 가능합니다. 반면에 new는 할당할 타입을 지정하면 알아서 할당할 타입의 포인터로 넘어오기 때문에 할당할 타입과 같은 타입의 포인터 변수로 받아오기만 하면 됩니다.

 

3. malloc은 메모리를 동적으로 할당하는 것만이 목적이기때문에 초기값을 지정해줄 수 없지만, new는 할당과 동시에 초기화가 가능합니다.

 

4. new는 생성자를 자동으로 호출합니다. 생성자는 객체를 자동으로 초기화해주는 함수로, malloc과 new의 가장 큰 차이점입니다.

 

 

차이점만 본다면 malloc을 쓸 이유가 없어보이지만 malloc이 필요한 경우도 분명히 존재합니다. malloc의 경우, realloc이라는 함수로 재할당이 가능하지만, new에는 이에 대응하는 것이 없기때문에 새로 할당 -> 복사 -> 해제 하는 과정을 거쳐야합니다. 하지만 객체의 경우 반드시 new / delete 를 사용해서 할당 / 해제 해주어야합니다. 객체가 아닌 경우에 재할당이 빈번하게 일어난다면, malloc / free 가 더 좋은 선택이 될 수 있습니다.

 

메모리 동적할당에서 가장 중요한 점은, 메모리 해제입니다. new로 할당을 했으면, delete를 작성해놓고 다음 로직을 짜는 습관을 들여놓아야 메모리 누수(memory leak)를 막을 수 있습니다.

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

상속 (Inheritance)  (0) 2020.10.27
C++ 에서의 캐스팅(형변환)  (0) 2020.10.27
연산자 오버로딩(전위/후위 증감 연산자)  (0) 2020.10.27
스택, 힙, 코드, 데이터 영역  (0) 2020.10.23
참조자(레퍼런스)  (0) 2020.10.23