将 Boehm 垃圾收集器与 C 标准库结合使用
为了开发利用 Boehm 保守垃圾收集器的多线程 C 应用程序,有有几种方法可供考虑:
1.重新定义运算符 ::new:
一种选择是将全局运算符 ::new 重新定义为 Boehm 的版本。但是,这种方法可能会干扰其他库组件,通常不推荐。
2.使用显式分配器:
或者,您可以将 Boehm 的 gc_allocator 模板与 STL 集合类结合使用。显式分配器可以指定用于分配的内存管理器,确保 STL 容器的内部数据和各个元素都是 GC 分配的。
3.创建自定义集合:
要获得更定制的解决方案,请基于 STL 模板类创建自定义集合,但使用 gc_allocator 作为分配器模板参数。这允许您使用 Boehm 的 GC_malloc_atomic 函数分配 STL 容器的内部数组,例如 std::string。
4。 std::string:
的注意事项要对 std::string 的内部数据进行 GC 分配,您可以使用 basic_string 模板和 gc_allocator 定义自己的字符串。通过重写运算符 [],您可以访问内部字符缓冲区并使用 GC_malloc_atomic 分配它。
5。 g 的潜在问题:
虽然 Boehm 的 GC 随着时间的推移提高了稳定性,但仍然不建议在 g 编译的复杂应用程序中使用它。但是,提供的示例 (myvec.cc) 使用 gc_allocator,无需使用普通 malloc 或 ::operator new 即可成功编译。
附加说明:
C 11 标准包括通过<内存> 对垃圾收集的支持。和标头。然而,这些功能尚未在 GCC 或 Clang 等广泛使用的编译器中完全实现。
以上是如何将 Boehm 的垃圾收集器与 C 标准库一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!