Using Boehm Garbage Collector with C Standard Library
When developing multi-threaded C applications, Boehm's conservative garbage collector can be useful for simplifying memory management. This raises the question of how to integrate Boehm GC with the C standard library's classes like std::map and std::vector.
One approach involves redefining the global operator ::new to use Boehm's implementation. However, a more straightforward solution is to explicitly specify the allocator template argument in the standard library collection templates.
For instance, to GC-allocate a vector of integers, one can use:
std::vector> my_vector;
The second template argument in std::vector is used to control the allocation of the vector's internal data structure, not the individual elements.
For std::string, using Basic_string with gc_allocator is an option:
std::basic_string, gc_allocator> my_string;
Alternatively, one can provide the array of characters directly with GC_malloc_atomic.
In summary, using Boehm GC with std::vector, std::string, and other standard library classes is possible by specifying the gc_allocator template argument. Redefining operator ::new is not necessary.
Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.
Copyright© 2022 湘ICP备2022001581号-3