더북(TheBook)

참조 카운팅은 다양한 경우에 잘 작동하지만 몇 가지 특징이 있다. 참조가 변수 스코프를 벗어날 때마다 할당 해제를 수행하기 때문에 속도가 느리다. 이는 일반적으로 관련된 메모리 블록을 함께 해제하는 것보다 효율성이 떨어진다. 또한, 주기적인 참조로 인해 프로그래머라면 피해야 할 추가적인 작업과 부지런함이 필요해진다.

다음으로 참조 카운트도 가비지 컬렉션의 한 형태이기 때문에 가비지 컬렉션, 정확히는 표시하고 청소하는 가비지 컬렉션이 있다. 가비지 컬렉션은 참조 카운팅과 수동으로 메모리를 관리하는 것 사이의 절충안이다. 가비지 컬렉션에는 별도의 참조 카운트가 없다. 대신, 전체 객체 트리에서 더 이상 참조되지 않는 객체를 찾아 가비지로 표시하는 작업을 별도로 해야 한다. 이렇게 모은 가비지를 잠시 보관하다가 크기가 일정 임계 값 이상으로 커지면 가비지 컬렉터에서 사용하지 않는 메모리를 한 번에 해제한다. 마이크로 할당 해제를 통해 메모리 조각화와 메모리 할당 해제 작업의 오버헤드를 줄일 수 있다. 카운터를 사용하지 않는 것 역시나 코드를 더 빠르게 한다. 또한, 러스트 프로그래밍 언어는 컴파일러에서 할당된 메모리가 더 이상 필요하지 않은 지점을 정확히 추적할 수 있는 차용 검사기(borrow checker)라는 새로운 메모리 관리 방식을 도입했다. 이 말은 러스트에서 코드를 작성할 때 런타임에 메모리 할당을 위한 추가 비용이 전혀 없다는 것을 의미한다. 하지만 특정 방식으로 코드를 작성해야 하며, 정확한 방법을 알 때까지 수많은 컴파일러 오류를 처리하는 비용을 지불해야 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.