본문 바로가기

CS 지식

[C++] malloc(), free() vs new, delete

1. malloc(), free()

힙에서 동적으로 메모리를 할당, 할당 해제하는 데 사용한다.

malloc() 함수는 지정된 크기의 힙에 메모리 블록을 할당하는 데 사용되는 C 표준 라이브러리 함수다.

할당된 메모리의 첫 번째 바이트에 대한 포인터를 반환하거나, 할당에 실패한 경우 null 포인터를 반환한다.

free() 함수는 malloc()으로 할당된 메모리 블록을 할당 해제하는 데 사용되는 C 표준 라이브러리 함수다.

메모리 블록에 대한 포인터를 인수로 사용하고, 다시 사용할 수 있도록 시스템에 해제한다.

 

2. new(), delete()

C++에서 제공하는 연산자다.

new: 힙에 객체의 인스턴스를 생성하고, 생성자로 생성하는 데 사용된다.

새로 생성된 개체에 대한 포인터를 반환한다.

delete: new로 할당된 메모리를 할당 해제하고, 삭제 중인 개체의 소멸자를 호출하는 데 사용된다. 

개체에 대한 포인터를 인수로 사용한다.

 

3. 비교

malloc(), free()

저수준 C 함수이다. C++에서 사용할 경우 #include "stdlib.h"를 해야 한다.

개체의 생성자와 소멸자를 호출하지 않는다.

malloc은 void 함수라서 반환받은 것을 해당 타입의 포인터로 형변환해야 한다.

malloc으로 할당한 경우, realloc을 활용해 메모리 크기를 조정할 수 있다.

 

new, delete

C++ 전용 연산자다.

개체의 생성자와 소멸자를 호출한다. 생성자를 호출해 초기값을 줄 수 있다.

이 외에도 예외 처리, 오버로드, new 배치와 같은 추가 기능이 존재한다.

new를 했을 때 반환값이 해당 타입의 포인터로 자동 반환된다.

new로 할당한 경우 직접적으로 메모리 크기를 조정할 수 있다. (재할당이 많은 경우 malloc이 나은 방법일 수도 있다.)

 

참고자료

https://easycode.tistory.com/15

https://github.com/Romanticism-GameDeveloper/GameDeveloper-Client-Interview/blob/main/C%2B%2B/mallocfree%20vs%20newdelete.md

 

 

'CS 지식' 카테고리의 다른 글

[C++] static  (0) 2025.05.08
[C++] map vs unordered_map  (0) 2025.05.08
[C++] const와 pointer  (0) 2025.04.20
[C++] Cast  (0) 2025.04.19
[C++] 배열과 리스트  (0) 2025.04.19