malloc / new 특징 및 차이점
variable_name = ({type} *) malloc (sizeof ({type}));
str = (char *) realloc(str, 25);
{type} variable_name = new {type} (parameter_list);
공통점
차이점
malloc: 함수.
new: 연산자(operator).
malloc은 바이트 단위의 사이즈를 인자로 받아서 사용 가능한 메모리 공간의 시작 주소를 반환한다.
malloc은 연속된 메모리를 가진 자료형(POD)에 대해서만 크기를 할당해 줄 수 있다. 이를 POD(Plain Old Data)라고 부른다.
C와 호환 가능한 타입으로서, char int float double 배열 및 포인터 등이 존재.
C++ 구조체 내부의 함수 선언. 즉, 함수를 포함한 클래스는 POD타입에 포함되지 않는다.
- 만약 클래스가 생성자를 포함한 어떠한 함수라도 포함하고 있지 않다면
POD.
malloc: 실패시 NULL 반환.
new: 예외를 throw.
malloc: 메모리 공간을 동적으로 할당하는것이 목적이기 때문에 초기값을 지정해 줄 수 없다.
- 따라서, 메모리 주소를 반환할때 기본적으로 쓰레기값을 반환한다.
new: 할당과 동시에 초기화가 가능하다.
- 따라서, 생성자를 자동으로 호출한다. 생성자는 객체를 자동으로 초기화 하는 함수.
malloc: 라이브러리 제공 함수로 <stdlib.h>를 include 해야 한다.
new: 바로 사용 가능.
malloc: realloc이라는 함수로 재할당이 가능하다.
new: 위와같은 기능이 없으므로 새로운 변수에 할당한 후 복사해준 다음 기존 변수를 지워야한다.
new가 malloc보다 더 빠르다.
new가 연산자(operator)로서 함수인 malloc보다 빠르다.
malloc: free로 해제.
new: delete로 해제.