C++

[C++] malloc/free와 new/delete

programmer-faust 2025. 9. 3. 04:17
  • 순서
    1. malloc/free
    2. new/delete
    3. 차이점
  • malloc/free
    1. C와 C++언어에서 메모리 할당 및 해제를 위해 사용되는 함수임. 하지만 C스타일로 C에서 주로 이용됨
    2. malloc()은 프로그램 실행 중에 필요한 만큼의 메모리 공간을 힙영역에서 할당함
    3. malloc()은 void*을 반환함. C에서 다른 포인터로의 암묵적 변환이 허용되어 캐스트가 불필요
    4. free()함수는 malloc()으로 할당 받았던 메모리 공간을 운영체제로 반환함.
    5. 생성자와 소멸자를 호출하지 않으며 실패 시 NULL을 반환함
  • new/delete
    1. C++에서 동적 메모리 할당 및 해제를 위해 사용되는 연산자
    2. new는 프로그램 실행 중에 필요할 때 힙 영역에 메모리를 할당하고 객체를 생성함
    3. new 동작시 내부에서 operator new로 void*를 반환한 뒤 메모리에 요청한 타입의 생성자를 호출하여 객체를 초기화함 결과적으로 요청했던 T*으로 타입화된 포인터를 반환함.
    4. delete는 소멸자를 호출하고, 할당된 메모리를 해제하여 운영체제가 다시 사용할 수 있도록 반환함.
    5. 실패 시 기본적으로 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