언어/Basic C++

[Basic C++] #59_가비지 컬렉션

Hardii2 2022. 9. 27. 22:49

 

[Basic C++] #59_가비지 컬렉션

C++의 "가비지 컬렉션"에 대해 알아보겠습니다.

"전문가를 위한 C"의 22 항목, "효과적인 메모리 관리"에 해당하는 내용입니다.

 

 


 

개념
가비지 컬렉션은 자동 메모리 관리 기법 중 하나로, 프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 식별하고 해제하는 프로세스입니다. 가비지 컬렉션은 자동 메모리 관리를 통해 댕글링 포인터 발생을 방지하고, 편의성을 제공하지만, 런 타임 오버헤드를 유발합니다.

 

마크 앤 스윕 알고리즘
마크 앤 스윕 알고리즘은 가비지 컬렉션의 접근 방법 중 하나로 주기적으로 모든 포인터에 대해 해당 메모리를 참조하여 사용하는 부분이 있는지 검사하여 표시(마크)합니다. 각 검사 주기가 끝날 때마다 표시되지 않은 메모리를 "미사용"으로 취급하여 해제합니다. 마크 앤 스윕 알고리즘 사용을 위해 필요한 사항이 존재합니다!

1. 모든 포인터를 가비지 컬렉터에 등록하여 가비지 컬렉터가 순회하며 검사할 수 있도록 합니다.
2. 모든 객체를 "GarbageCollectible"을 상속하도록 합니다.
3. 가비지 컬렉터가 포인터들을 검사하는 동안, 병렬적으로(멀티쓰레딩) 해당 포인터에 접근하지 못하도록 합니다.

설명만 보면 별다른 큰 문제없이 편리하게 사용할 수 있는 툴로 보이지만, 단점들이 분명히 존재합니다!

1. 가비지 컬렉션을 수행중일 때 응답률이 떨어집니다.
2. 가비지 컬렉션 사용은 "비결정적인" 소멸자를 이용하며, 정확한 시점에 호출된다는 보장이 없습니다.