- 순서
- malloc/free
- new/delete
- 차이점
- malloc/free
- C와 C++언어에서 메모리 할당 및 해제를 위해 사용되는 함수임. 하지만 C스타일로 C에서 주로 이용됨
- malloc()은 프로그램 실행 중에 필요한 만큼의 메모리 공간을 힙영역에서 할당함
- malloc()은 void*을 반환함. C에서 다른 포인터로의 암묵적 변환이 허용되어 캐스트가 불필요
- free()함수는 malloc()으로 할당 받았던 메모리 공간을 운영체제로 반환함.
- 생성자와 소멸자를 호출하지 않으며 실패 시 NULL을 반환함
- new/delete
- C++에서 동적 메모리 할당 및 해제를 위해 사용되는 연산자
- new는 프로그램 실행 중에 필요할 때 힙 영역에 메모리를 할당하고 객체를 생성함
- new 동작시 내부에서 operator new로 void*를 반환한 뒤 메모리에 요청한 타입의 생성자를 호출하여 객체를 초기화함 결과적으로 요청했던 T*으로 타입화된 포인터를 반환함.
- delete는 소멸자를 호출하고, 할당된 메모리를 해제하여 운영체제가 다시 사용할 수 있도록 반환함.
- 실패 시 기본적으로 std::bad_alloc 예외를 던짐(nothrow 버전은 nullptr을 반환함)
- 차이점
| 항목 | malloc/free | new/delete |
| 소속 | C 표준라이브러리<cstdlib> | C++ 연산자 |
| 반환 타입 | void* | 요청한 타입의 포인터 |
| 초기화 | 초기화하지 않음 calloc은 0으로 초기화함 | 생성자 호출로 초기화. new T은 기본 초기화, new T()는 값 초기화 |
| 소멸자 호출 | X | O |
| 실패 처리 | 할당 실패 시 NULL반환 | bad_alloc 예외 던짐 |
| 배열 처리 | malloc으로 할당한 메모리는 별도 요소 소멸X | new[]는 각 요소 생성, delete[]는 각 요소의 소멸자 호출 |
| 맞춤 동작 | 표준 함수 | operator new/operator delete를 오버로딩 가능 |
| 혼용 | malloc, free 짝만 허용 | new, delete 또는 new[], delete[]짝만 허용 |
| 사용 권장 상황 | C 라이브러리 호출/낮은 수준 메모리 조작/성능 최적화 | 일반적인 C++ 객체 생성 및 RAII 패턴 |
'C++' 카테고리의 다른 글
| [C++]static 키워드 (0) | 2025.09.03 |
|---|---|
| [C++] 캐스트 연산자/RTTI (0) | 2025.09.03 |
| [C++]동적할당과 깊은/얕은 복사 (0) | 2025.09.03 |
| [C++]포인터와 레퍼런스 (0) | 2025.09.02 |
| [C++]클래스와 구조체 (2) | 2025.09.01 |