"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como integrar o coletor de lixo Boehm com classes de biblioteca padrão C++ como `std::vector` e `std::string`?

Como integrar o coletor de lixo Boehm com classes de biblioteca padrão C++ como `std::vector` e `std::string`?

Publicado em 2024-11-08
Navegar:490

How to Integrate Boehm Garbage Collector with C   Standard Library Classes Like `std::vector` and `std::string`?

Usando o Boehm Garbage Collector com C Standard Library

Ao desenvolver aplicativos C multithread, o coletor de lixo conservador de Boehm pode ser útil para simplificar a memória gerenciamento. Isso levanta a questão de como integrar o Boehm GC com as classes da biblioteca padrão C, como std::map e std::vector.

Uma abordagem envolve a redefinição do operador global ::new para usar a implementação de Boehm. No entanto, uma solução mais direta é especificar explicitamente o argumento do modelo do alocador nos modelos de coleção de biblioteca padrão.

Por exemplo, para alocar GC um vetor de inteiros, pode-se usar:

std::vector> my_vector;

O segundo argumento do modelo em std::vector é usado para controlar a alocação do a estrutura de dados interna do vetor, não os elementos individuais.

Para std::string, usar Basic_string com gc_allocator é uma opção:

std::basic_string, gc_allocator> my_string;

Alternativamente, pode-se fornecer a matriz de caracteres diretamente com GC_malloc_atomic.

Em resumo, usar Boehm GC com std::vector, std::string e outras classes de biblioteca padrão é possível especificando o argumento do modelo gc_allocator. Redefinir o operador ::new não é necessário.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3