본문 바로가기
프로그래밍/C++

[C/C++] 메모리 동적할당 new와 malloc의 차이점

by 아끄리끄 2022. 5. 15.
반응형
SMALL
반응형
SMALL



메모리 동적 할당 그거 뭐 아무렇게나 하면 되지 않을까?

 

 

프로그래밍을 처음 배우게 되었을 때

가장 많은 의문점이 들었던 점은

메모리를 할당하여 사용하는데

정적 메모리와 동적 메모리가 있고,

동적 메모리를 할당하는 방법이 여러 가지가 있다는 점에서

의문점이 들었다.

 

C언어에서는 기본적으로 malloc이라는 함수를 사용하여 메모리를 할당하였다.

이후 C++ 언어에서는 new라고 하는 함수가 추가되어 메모리를 할당하였다.

(C++에서도 molloc을 호출하여 사용이 가능하다!)

 

그렇다면 이 두가지 동적 메모리 할당 방법의 차이점은 과연 무엇일까?

 

 

1. 메모리 할당과 해제 함수 호출 차이

우선  new로 할당된 동적 메모리는 delete로 메모리 해제를 해주어야 한다.

malloc으로 할당된 동적 메모리는 free로 메모리 해제를 해주어야 한다.

 

2. 메모리 할당/해제 시 생성자/소멸자 호출 차이

new로 메모리 할당 시 생성자를 호출해 주고, delete로 메모리 해제 시 소멸자를 호출해 준다.

(이런 기능으로 생성자/소멸자를 이용한 초기화가 가능하다.)

malloc과 free의 경우 생성자/소멸자를 호출해 주지 않는다.

 

3. 메모리 할당 시 리턴 값의 차이

new로 메모리 할당 시 할당된 자료형으로 리턴을 한다.

malloc은 메모리 할당 시 자료형을 지정해서 리턴을 해야만 한다.

new의 이런 기능은 type-safe라고 하며, 컴파일러가 할당된 메모리의 타입을 확인해 주는 기능으로 보면 된다.

 

예외 발생 시 리턴 값의 경우에도

new는 예외처리 구문을 작성할 수 있지만

malloc의 경우는 항상 nullptr이 리턴되어 예외처리를 할 수 없다.

 

4. 메모리 재할당 차이

new는 메모리 할당 후 크기를 조정하여 메모리를 할당할 수 없다.

하지만 malloc은 메모리 할당 후 realloc을 통해 크기를 재할당할 수 있다.

(하지만 C++에서 realloc이 제외된 이유는 명확히 있을 것이다. 실제로 이 기능이 유용하게는 쓸 수 있겠지만

메모리 관리 차원에서 그리고 SW 설계 관점에서는 좋지 않다고 판단된다.

goto도 같은 관점으로 지양해야 한다.)

 

new/delete와  malloc/free의 차이 간략한 설명 코드

 

지금까지 메모리 할당과 해제에 필요한

new(delete)와 malloc(free)의 차이에 대해서 설명해 보았다.

설계와 구현 방식에 따라 적절한 방법의 메모리 할당/해제를 사용하면 될 것이다.

 

끝.

반응형
LIST

댓글