gpt4 book ai didi

c++ - Boehm 垃圾收集器中的精确模式

转载 作者:可可西里 更新时间:2023-11-01 16:37:51 25 4
gpt4 key购买 nike

我在 Mono 的网页上看到他们在精确模式下使用 Boehm GC。我也将 Boehm GC 与 C++ 一起使用,但是,我在其文档或 header 中找不到任何指示精确模式的内容,更不用说如何打开它了。

关于它实际上是否默认具有精确模式以及如何打开它的任何信息,或者它只是 Mono 开发人员的某种修改?

最佳答案

Mono 下 Boehm GC 中的精确模式不仅仅是 GC_MALLOC_ATOMIC。这仅适用于基本类型的数组。

对于托管类型,使用 GC_gcj_malloc。 Mono 的编译器为每个托管类型生成一个对象描述符,然后它简单地调用 GC_gcj_malloc 并带有大小参数和指向托管类型描述符的指针。 Boehm GC 然后在标记阶段引用描述符以跟踪托管指针。

你最终只会将根指针作为原始指针放在堆栈上(GC_gcj_malloc 返回一个 void* 并且无法通过某种方式告诉 GC 指针在堆栈上的位置GC 收集之前的堆栈描述符)。这就是 Mono(在 SGen 之前)说他们以保守模式扫描堆栈的原因。

如果你想在 C++ 下实现它,你将无法简单地依赖 C++ 编译器为你生成对象描述符。我很久以前的设想是编写一个中间编译器来解析所有 C++ 头文件以查找已标记为托管类的类定义(例如 _ref class MyManagedObject where _ref 只是一个 #define 到什么都没有)并生成一个包含这些对象描述符的头文件。然后,您将使用 GC_make_descriptorGC_malloc_explicitly_typed 函数以精确模式而不是 GC_gcj_malloc 分配您的对象,因为您无法控制您的 C++编译器分配它的 vtable。

*编辑:参见 Managed C++ for GCC (open source GPL v3) .

关于c++ - Boehm 垃圾收集器中的精确模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6774605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com