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을 잘못 사용하게 되면 오류나 메모리 낭비를 하게 될 가능성이 높아지기 때문
- 하지만, 확실하게 알려면 조금 더 공부가 필요할 것 같습니다.
'Programming Language > C/C++' 카테고리의 다른 글
C++ Volatile 키워드 (0) | 2014.11.15 |
---|---|
C++ 포인터와 레퍼런스의 차이 (0) | 2014.11.12 |
C++ 가상 함수 (virtual) - 가상 함수의 원리 (1) | 2014.11.07 |
C++ 가상 함수 (virtual) - 가상 소멸자 (0) | 2014.11.07 |
C++ 가상 함수 (virtual) - 동적 바인딩 (0) | 2014.11.07 |