C 표준 라이브러리와 함께 Boehm Garbage Collector 사용
Boehm의 보수적인 Garbage Collector를 활용하는 멀티 스레드 C 애플리케이션을 개발하려면 다음이 필요합니다. 고려해야 할 몇 가지 접근 방식은 다음과 같습니다.
1. 연산자 ::new 재정의:
한 가지 옵션은 전역 연산자 ::new를 Boehm의 버전으로 재정의하는 것입니다. 그러나 이 접근 방식은 다른 라이브러리 구성 요소를 방해할 수 있으므로 일반적으로 권장되지 않습니다.
2. 명시적 할당자 사용:
또는 STL 컬렉션 클래스와 함께 Boehm의 gc_allocator 템플릿을 활용할 수도 있습니다. 명시적 할당자는 할당에 사용할 메모리 관리자를 지정하여 STL 컨테이너의 내부 데이터와 개별 요소가 모두 GC 할당되도록 보장할 수 있습니다.
3. 사용자 정의 컬렉션 생성:
더욱 맞춤화된 솔루션을 위해 STL 템플릿 클래스를 기반으로 사용자 정의 컬렉션을 생성하되 gc_allocator를 할당자 템플릿 인수로 사용하세요. 이를 통해 Boehm의 GC_malloc_atomic 함수를 사용하여 std::string과 같은 STL 컨테이너의 내부 배열을 할당할 수 있습니다.
4. std::string:
에 대한 고려 사항 std::string의 내부 데이터를 GC 할당하려면 gc_allocator와 함께 basic_string 템플릿을 사용하여 자신만의 문자열을 정의할 수 있습니다. [] 연산자를 재정의하면 내부 char 버퍼에 액세스하고 GC_malloc_atomic을 사용하여 할당할 수 있습니다.
5. g의 잠재적인 문제:
Boehm의 GC는 시간이 지남에 따라 안정성이 향상되었지만 g로 컴파일된 복잡한 애플리케이션에서는 여전히 사용이 권장되지 않을 수 있습니다. 그러나 gc_allocator를 활용하는 제공된 예제(myvec.cc)는 일반 malloc 또는 ::operator new를 사용하지 않고도 성공적으로 컴파일됩니다.
추가 참고 사항:
C 11 표준에는
위 내용은 C 표준 라이브러리와 함께 Boehm의 Garbage Collector를 어떻게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!