首页 > 后端开发 > C++ > Boehm 的保守垃圾收集器可以与多线程应用程序的 C 标准库集成吗?

Boehm 的保守垃圾收集器可以与多线程应用程序的 C 标准库集成吗?

Linda Hamilton
发布: 2024-10-26 16:28:30
原创
523 人浏览过

Can Boehm's Conservative Garbage Collector Be Integrated with the C   Standard Library for Multi-threaded Applications?

将保守垃圾收集与 C 标准库集成

问题:

在多个- 线程C应用程序,Boehm的保守垃圾收集器(GC)能否与C标准库结合有效利用?具体来说,operator::new 以及 std::vector 和 std::string 提供的分配器应该如何处理?

答案:

1。重新定义操作符 ::new:

使用 Boehm GC 重新定义 ::operator new 是没有必要的。通过正确利用 Boehm 的 GC,可以避免显式地重新定义 ::operator new。

2。标准库容器的分配器:

std::vector:

  • 使用 std::vector 并将显式分配器参数设置为 Boehm 的 gc_allocator。这确保了内部数据结构和各个元素都是 GC 分配的。

std::string:

  • GC 分配内部字符数组,使用从 std::basic_string 派生的自定义字符串实现并使用 gc_allocator。
  • 在标准实现中没有简单的方法强制对字符数组进行 GC_malloc_atomic 分配。

示例:

以下代码演示了 GC 分配向量的自定义实现:

<code class="cpp">#include <gc/gc_cpp.h>
#include <gc/gc_allocator.h>
#include <vector>

class Myvec {
  std::vector<int, gc_allocator<int>> _vec;
public:
  Myvec(size_t sz = 0) : _vec(sz) {}
  // ... (rest of class implementation)
};</code>
登录后复制

3.与 g 的兼容性:

是的,可以将 Boehm GC 与 g 编译的应用程序一起使用。遵循上述指南,有效地将 GC 与标准库集成。

附录(2017 年 1 月):

  • 检查提案 n2670 和 <内存>以及垃圾收集支持,以实现 C 垃圾收集功能未来潜在的增强。

以上是Boehm 的保守垃圾收集器可以与多线程应用程序的 C 标准库集成吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板