C ++标准库和Boehm垃圾收集器

我想在Linux / AMD64 / Debian和GCC 4.6上开发一个多线程C ++应用程序(最终大多数C ++代码将由应用程序本身生成,可以将其视为高级领域特定语言)。可能是最新的C ++ 11标准)。


我真的想对我的所有堆分配使用Boehm的保守垃圾收集器,因为我想分配new(GC)而不用担心delete。我假设Boehm的GC运行良好。


使用(而不是C)C ++的主要动机是所有的算法和集合std::map... std::vector由C ++标准库提供。


Boehm的GC提供了一个gc_allocator<T>模板(在其文件gc / gc_allocator.h中)。


我应该重新定义operator ::new为Boehm的成员吗?


还是应该将所有收集模板与显式分配器模板参数设置为some一起使用gc_allocator?我不完全了解std :: vector的第二个模板参数(分配器)的作用?它是用于分配矢量内部数据,还是用于分配每个单独的元素?


那std::string-s呢?如何使他们的数据GC分配?我应该使用带basic_string模板的字符串gc_allocator吗?有什么方法可以让char的内部数组分配为GC_malloc_atomicnot GC_malloc?


还是建议不要将Boehm GC与g ++编译的应用程序一起使用?


问候。


Smart猫小萌
浏览 691回答 3
3回答

慕慕森

这完全取决于您对C ++的熟悉程度和熟练程度。您是否可以在不使用的情况下编写一个不错的C ++程序delete,您是否意识到new仅应在非常特殊的情况下使用它,并且在大多数情况下不需要指针?如果您了解所有这些并得出结论,您需要一个垃圾收集器,那么请务必继续。另一方面,如果您不这样做,您可能会发现惯用的现代C ++非常擅长于用户友好的确定性内存管理。
打开App,查看更多内容
随时随地看视频慕课网APP