개요

필요에 따라 사용할 메모리의 공간을 할당받아야 할 상황이 있다.

이러한 경우 동적인 메모리 할당이 필요하게 된다.

 

이전 동적 할당의 경우 malloc과 free를 통해 메모리의 할당과 반환을 해주었다.

여기서는 new와 delete를 사용한 동적할당에 대해 이야기할 것이다.

 

 


동적 할당

필요에 따라 사용할 메모리의 공간을 동적으로 할당 받는 것

 

동적 할당의 주의점

1. 메모리 누수 (Memory Leak)

할당받은 메모리를 반환하지 않은 경우 메모리의 누수가 발생한다.

 

2. 이중 반환 (Double Free)

이미 반환한 메모리를 다시 반환하는 경우 오류가 발생할 수 있다.

 

3. 댕글링 포인터 (Dangling Pointer)

이미 반환한 메모리를 가리키는 경우 원하지 않은 동작이 발생할 수 있다.

 

4. 조기 해제 (Premature free)

 

 

 

new / delete 와 malloc / free의 차이

동적할당 구조

new와 malloc은 기능적으로 차이를 보이지 않는다.

new를 디스어셈블리를 통하여 내부 구조를 확인해보면, operator new에서 malloc을 진행해주는 것을 알 수 있다.

 

마찬가지로 delete와 free 역시 동일한 구조로 이루어져있다.

delete의 디스어셈블리를 확인해 보면, free를 진행하는 것을 볼 수 있다.

 

차이점

new / delete 연산자는 클래스 타입일 경우, 자동으로 생성자와 소멸자를 호출한다.

728x90

'Program > C (C++,C#)' 카테고리의 다른 글

[C++] 스택 / 큐  (0) 2022.06.24
[C++] 리스트  (0) 2022.06.21
[C++] 가상 함수  (0) 2022.06.13
자료구조와 알고리즘  (0) 2022.06.07
[C++] Class 상속  (0) 2022.06.02

+ Recent posts