내일배움캠프 13일차 - C++ 문법 : 포인터와 자원관리

컴퓨터 메모리는 한정된 자원이므로 이를 효율적으로 활용하기 위해 다양한 고민을 해야한다.


스택 메모리

 - 일반 변수들은 대부분 스택 메모리 공간을 차지함.
 - 변수의 생존주기가 끝나면 선언 시 할당되었던 메모리가 자동으로 회수됨.
    → 직접 메모리 해제할 필요 없음.
 - 변수의 스코프(생존 영역)을 벗어나면 자동으로 해제되므로 장기적으로 관리하기 어려움.

변수는 { }내에 있는 동안에만 메모리에 등록된다.

x,y 변수의 생존주기

함수 내 선언된 변수의 생존 주기

반복문 내 선언된 변수의 생존 주기

중첩함수 내 선언된 변수의 생존주기

힙 메모리

 - 사용자가 동적으로 할당한 메모리는 힙 메모리에 저장됨.
 - 동적 할당 시 new 연산자를 사용하고, 해제 시 delete 연산자를 사용함.
 - 스택과 달리 자동으로 해제되지 않으므로 메모리 누수의 위험이 있음.
 - 동적할당된 객체(변수)의 생존주기는 사용자가 delete로 해제할 때까지 유지.

변수는 new로 생성한 이후 delete될때까지 메모리에 등록된다.

new로 동적할당한 변수는 delete로 해제한다.

안 쓰는 동적할당한 변수를 해제하지 않으면 힙메모리 내에서 공간을 계속 차지한다.
(메모리 누수)


Dangling Pointer(댕글링 포인터)

 - 이미 delete로 해제된 주소를 참조하고 있는 포인터
 - 포인터는 참조한 메모리의 해제여부를 알 수 없다.
 → 이미 해제된 메모리의 주소를 참조하는 포인터를 사용하는 건 위험하다.

Dangling 포인터 예시

이미 해제한 메모리를 해제하면 런타임에러 (액세스 위반) 발생

Memory Leak(메모리 누수)

 - 동적으로 할당한 메모리를 손수 해제하지 않았을 때 메모리에 계속 잔류하는 현상
 - 이렇게 쌓인 메모리가 용량을 가득 채우면 사용 가능한 메모리가 없을 수 있음.


스마트 포인터

 - 포인터에 할당되는 메모리를 자동으로 관리해주는 C++ 고유기능
 - new/delete를 통한 수동메모리 관리를 하지 않음. (자동으로 할당, 해제함)

스마트 포인터에는 여러 종류가 있다.

댓글

이 블로그의 인기 게시물

내일배움캠프 사전캠프 - 사전캠프설 연휴 커피 파밍 이벤트 작품 [ EXTREMITY ]

내일배움캠프 29일차 - 커리어데이 2일차 : 클라이언트 프로그래머로서 포트폴리오, 입사준비팁