내일배움캠프 13일차 - C++ 문법 : 포인터와 자원관리
컴퓨터 메모리는 한정된 자원이므로 이를 효율적으로 활용하기 위해 다양한 고민을 해야한다.
스택 메모리
- 일반 변수들은 대부분 스택 메모리 공간을 차지함.
- 변수의 생존주기가 끝나면 선언 시 할당되었던 메모리가 자동으로 회수됨.
→ 직접 메모리 해제할 필요 없음.
- 변수의 스코프(생존 영역)을 벗어나면 자동으로 해제되므로 장기적으로 관리하기 어려움.
- 사용자가 동적으로 할당한 메모리는 힙 메모리에 저장됨.
- 동적 할당 시 new 연산자를 사용하고, 해제 시 delete 연산자를 사용함.
- 스택과 달리 자동으로 해제되지 않으므로 메모리 누수의 위험이 있음.
- 동적할당된 객체(변수)의 생존주기는 사용자가 delete로 해제할 때까지 유지.
| 변수는 new로 생성한 이후 delete될때까지 메모리에 등록된다. |
| new로 동적할당한 변수는 delete로 해제한다. |
| 안 쓰는 동적할당한 변수를 해제하지 않으면 힙메모리 내에서 공간을 계속 차지한다. (메모리 누수) |
Dangling Pointer(댕글링 포인터)
- 이미 delete로 해제된 주소를 참조하고 있는 포인터
- 포인터는 참조한 메모리의 해제여부를 알 수 없다.
→ 이미 해제된 메모리의 주소를 참조하는 포인터를 사용하는 건 위험하다.
Memory Leak(메모리 누수)
- 동적으로 할당한 메모리를 손수 해제하지 않았을 때 메모리에 계속 잔류하는 현상
- 이렇게 쌓인 메모리가 용량을 가득 채우면 사용 가능한 메모리가 없을 수 있음.
스마트 포인터
- 포인터에 할당되는 메모리를 자동으로 관리해주는 C++ 고유기능
- new/delete를 통한 수동메모리 관리를 하지 않음. (자동으로 할당, 해제함)
스마트 포인터에는 여러 종류가 있다.
댓글
댓글 쓰기