2009-12-25 3 views

답변

5

boost::shared_ptr과 같은 참조 카운팅 포인터를 사용하십시오. 클래스에 대한 변경 사항은 필요하지 않지만 클래스 인스턴스를 동적으로 생성하는 것으로 제한됩니다.

+0

감사합니다.하지만 모든 라이브러리를 사용하고 싶지 않습니다. – Ashish

+2

라이브러리를 사용하지 않고 C++를 효과적으로 사용할 수 없습니다. 그러나 Boost 소스를 프로젝트에 복사하기 만하면됩니다. –

+0

참조 카운팅을하는 경우 새로운 – doron

1

Wikipedia article on referencing counting은 내가 할 수있는 것보다 더 잘 상태 :

가비지 컬렉션을 추적을 통해 참조 횟수의 가장 큰 장점은 객체가 즉시 더 이상 참조 할 수 없습니다로 재생되어 있으며, 증분 방식으로, 수거주기가 길어지고 모든 물체의 수명이 명확하게 정의됩니다. 메모리가 제한된 실시간 응용 프로그램이나 시스템에서는 응답 성을 유지하는 것이 중요합니다. 참조 카운팅은 가비지 수집을 구현하는 가장 간단한 형태 중 하나입니다. 또한 운영 체제 객체와 같이 메모리보다 종종 부족한 비 메모리 자원을 효과적으로 관리 할 수 ​​있습니다 (GC 시스템 추적에서는 종료 기가 사용되지만 지연된 교정으로 인해 문제가 발생할 수 있음). 가중치 적용 횟수는 분산 시스템의 가비지 수집에 적합한 솔루션입니다.

가비지 수집주기 추적은 너무 많은 라이브 개체 집합이 사용 가능한 메모리를 채우는 경우 너무 자주 트리거됩니다. 효율적이기 위해서는 추가 공간이 필요합니다. 여유 공간의 총량이 감소하면 참조 계산 성능이 저하되지 않습니다. 1

참조 횟수는 다른 런타임 최적화에 대한 입력으로 사용하는 데 유용한 정보입니다. 예를 들어, 많은 함수형 프로그래밍 언어와 같이 변경 불가능한 객체에 크게 의존하는 시스템은 빈번한 복사로 인해 효율성이 저하 될 수 있습니다. 그러나 객체가 하나의 참조 만 가지고 있고 (대부분의 시스템에서와 마찬가지로) 참조가 손실되는 것과 비슷한 새로운 객체가 작성되는 경우 (str ← str + "a"), 원래의 객체에서 돌연변이로 연산을 대체 할 수 있습니다.

  • 가 포함 빈번한 업데이트가 비 효율성의 원천 : 순진 형태로

    참조 카운팅 개선하기 위해 추가 메커니즘을 필요로 둘의 추적 가비지 컬렉션을 통해 두 가지 단점을 가지고 있습니다. 가비지 콜렉터 추적은 컨텍스트 스위칭 및 캐시 라인 결함을 통해 효율성에 심각한 영향을 줄 수 있지만 상대적으로 드물게 수집되지만 객체에 액세스하는 것은 지속적으로 수행됩니다. 또한 중요하지는 않지만 참조 계산은 모든 메모리 관리 객체가 참조 횟수를위한 공간을 예약해야합니다. 가비지 콜렉터를 추적 할 때,이 정보는 해당 오브젝트를 참조하는 참조에 내재적으로 저장되어 공간을 절약합니다. 가비지 콜렉터를 추적 할 때, 특히 점진적 추적기를 추적하면 다른 목적을 위해 추가 공간이 필요할 수 있습니다.

  • 위에서 설명한 순진 알고리즘은 직접 또는 간접적으로 자체를 참조하는 참조주기를 처리 할 수 ​​없습니다. 순전히 참조 카운트에 의존하는 메커니즘은 참조 카운트가 0이 아닌 채로 유지되기 때문에 삭제를 위해 주기적으로 객체 체인을 고려하지 않습니다. 이 문제를 처리하는 방법은 있지만 참조 계산의 오버 헤드와 복잡성을 증가시킬 수 있습니다. 반면에 이러한 방법은 사이클을 형성 할 수있는 데이터 (종종 모든 데이터의 작은 하위 집합)에만 적용하면됩니다. 그러한 방법 중 하나는 약한 참조를 사용하는 것입니다.
2

라이브러리의 클래스에서 상속 된 서브 클래스를 만들고 서브 클래스에서 참조 카운팅을 구현하십시오.

0

Jim Bruck이 언급했듯이 확장은 하나의 메커니즘입니다. 확장이 불가능한 경우 위임 래퍼 방식을 사용할 수 있습니다.

관련 문제