malloc과 new의 차이점


malloc : 라이브러리에서 제공하는 메모리 할당 함수, free(변수명) 으로 할당 내용을 해제한다.

 - 형태 : void *malloc(size_t size), 반환형 : *void 메모리공간

  + 예 : int a = (int*)malloc(50 * sizeof(int));  

 - int형의 자료가 50개가 들어갈 공간을 확보, a[0~49]의 인덱스로 접근가능

 - 프로그램 실행 중에 메모리를 할당받는 동적 메모리 할당 함수

new : 변수나 함수 객체의 생성자를 자동으로 호출하는 연산자, delete로 해제한다.



malloc / free

new  / delete

 라이브러리가 제공하는 함수

 프로그래밍 언어가 제공하는 연산자

 - 오버로딩 가능

 필요한 메모리 양을 바이트 단위로 지정하고 void*를 리턴

 - sizeof 연산자와 캐스트 연산자의 도움을 받아야 한다.

 - void를 리턴하는 이유는 다양한 형식(char, int, long 등)에 적용되어야 하기 때문

 할당할 타입을 지정하고 해당 타입의 포인터를 리턴

 - 할당한 타입과 같은 타입의 포인터 변수로 대입만 받으면 된다.

 메모리 할당이 목적, 초기값 할당 불가

 - 다른 예로 calloc 함수는 malloc 처럼 메모리 할당을 하는 점에선 같지만 모든 공간을 0으로 초기화한다.

 - calloc도 0으로 초기화 할 뿐이지 원하는 변수로 초기화는 불가

 할당과 초기화를 동시에 진행할 수 있다.

 - int a = new int(123);

 - int a = new int(); a = 123;

  + 위 두개의 예는 같은 결과를 낸다

 오로지 메모리 공간 만을 할당

 - 생성자를 호출하지 않음

 생성자를 자동으로 호출

 - 생성자 : 객체를 초기화하는 함수 

 할당된 메모리는 크기 변경이 가능하다.

 - realloc으로 재할당 가능

 재할당이 불가능하다.

 - 새로운 변수를 만들고 그 안에 원래 변수를 만들어 대체하는 식으로 재할당해야한다.

 - 재할당 할 때마다 메모리 번지가 바뀐다.

 객체가 아니고 빈번하게 재할당을 한다면 malloc/free

 객체를 할당할 때에는 반드시 new  / delete

 - delete는 소멸자라고 불리우는 함수가 호출되어 삭제된다.


조사하면서 알게된 점인데, malloc/free는 아예 없는거라고 생각하고 프로그래밍 하는게 좋다고 합니다.

- malloc을 잘못 사용하게 되면 오류나 메모리 낭비를 하게 될 가능성이 높아지기 때문

- 하지만, 확실하게 알려면 조금 더 공부가 필요할 것 같습니다.

Posted by 긍정왕오킹