2009-08-04 5 views
1

누구도 Apple의 autozone garbage collector을 사용하려 했습니까? 또는 C++에서 사용할 수있는 구성 가능하고 유용한 것을 가리킬 수 있습니까?AutoZone 가비지 컬렉터 사용

편집 : BDD와 같은 의사 결정 다이어그램에서 작업하므로 가비지 수집기로 메모리를 관리하는 것이이 경우 효율적인지 테스트하고 싶습니다.

편집 2 : 더 정확하게는 의사 결정 다이어그램 라이브러리를 구현할 때 가비지 수집기를 구현해야합니다. 사실, 이미 내 라이브러리에서이 작업을 수행했지만 코드의 25 % 정도를 나타냅니다. 그리고 그것은 가장 복잡한 부분입니다 :-) 그렇습니다. 가비지 수집기를 원합니다 :-) 그리고 예, 이미 RAII 기술을 사용합니다. 그리고 마지막으로, shared_ptr의 비용을 감당할 수 없습니다. 왜냐하면 가비지 수집해야하는 수십억 개의 객체를 저장하기 때문입니다.

답변

1

아니요. 시도하지 않았습니다. hp labs에서 this을 시도해보십시오. 자세한 내용은 here입니다. 이 콜렉터는 Linux, * BSD, 최신 Windows 버전, MacOS X, HP/UX, Solaris, Tru64, Irix 및 기타 운영 체제에서 작동합니다.

2

대부분의 사람들은 C++에서 가비지 컬렉터를 피하는 경향이 있습니다.

당신이 당신의 자원을 관리하는 RAII를 사용하는 방법을 배우게되면 그들은 일반적으로 필요하지 않습니다, 그리고 C++ 가비지 수집에 대한 적절한 지원하지 않기 때문에, 존재하는 GC의 문제가 몇 가지 있습니다

  • 그들은을 모든 할당을 잡을 수없는
  • 그들은 소멸자 C++에서 GC가 어디에 상황이 있습니다 물론

에 좋은 재생되지 않을 수 있습니다 (그들은 일부 할당이 참조 여부의 보수적 인 생각을해야합니다) 유능한. 그러나 95 %의 경우에는 적절한 메모리 관리 기법 (RAII)을 배우는 것만으로도 더 나은 서비스를 제공 할 수 있습니다.

그러나 저는 Autozone을 사용하지 않았으며 귀하의 경우 또는 일반적으로 얼마나 잘 작동하는지 모릅니다.

3

이미 암시 적 가비지 수집 라이브러리가 필요한지 이미 분석 했습니까? 당신은 그것이 단지 java (또는 Objective C, ...) 향수가 아니라고 확신합니까?

이것은 C++에서 자연스럽지 않으므로 해결할 문제보다 더 많은 문제가 발생할 것입니다. 실제 구현은 주로 실험 테스트에 사용되며 프로덕션 앱에는 사용되지 않습니다. 언어의 잠재력을 짜내는 가장 좋은 방법은 그 언어로 태클되는 일을하는 것입니다.

명시 적 가비지 수집 (boost :: shared_ptr 및 friends)이 사용자의 필요를 충족시키는 지 먼저 확인하고 가능한 경우 복잡성을 피하십시오.

알렉산더 편집 후 2 : 마술은 존재하지 않습니다. 저는 두려워요. 왜 가비지 수집기가 RAII 관용구보다 더 효율적이라고 생각합니까?

참조 계산이 필요하지 않은 경우 scoped_ptr을 사용할 수 있습니다. 그러나 당신이 그것을 필요로한다면, 당신이 그것을 숨길 정도는 별도로 지불해야합니다.

아마도 문제는 많은 수의 개체를 할당하는 것이 좋습니다. 작은 것들이라면, "Modern C++ Design"(Andrei Alexandrescu)의 4 장 (Small-Object Allocation)을 정말 흥미롭게 찾을 수 있습니다.

+0

포인터 컨테이너를 살펴볼 수도 있습니다. 그들은 메모리 오버 헤드가 없습니다 : http://www.boost.org/doc/libs/1_39_0/libs/ptr_container/doc/ptr_container.html –

+0

그리고 여기 Small Object Allocator의 구현은 http : // loki-lib입니다. cvs.sourceforge.net/loki-lib/loki/include/loki/SmallObj.h?view=markup –

2

사실, 가비지 컬렉션은 다가오는 C++ 20XX 표준의 한 부분 이었지만, 등을 구현 복잡성의 어려움을 이유로 떨어졌다 ...

그래서, 물론, 많은 사람들이 C에서 GC를 방지 ++, 그러나 표준위원회가 적극적으로 고려하고있는 요구가 충분히 강하다.

Apple의 AutoZone은 C++에서 사용하기 위해 구부릴 수있는 언어에 구애받지 않는 가비지 수집기입니다. 확실히 AutoZone은 Objective-C (및 C)에서 훌륭한 기초 구현을 위해 작동합니다.

AutoZone도 MacRuby 프로젝트에서 사용되며, 다른 프로젝트는별로 없습니다. 구현시 x86 및 ppc 아키텍처에 특정한 비트가 있지만 이식 가능하도록 설계되었으므로 필요한 경우 다른 CPU 유형으로 포팅해야합니다.

컬렉터 그것은 쉽지 않을 것 등/등록 취소 개체 및 명시 적 연결을 등록하기 위해 직접 사용할 수있는 API ...

을 가지고 있지만 그것은 확실히 행할 수있다.

관련 문제