gpt4 book ai didi

c++ - GC 可以用 C++ 原始指针实现吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:26 26 4
gpt4 key购买 nike

我想知道如何使用 C++ 的全功能指针算法来实现垃圾收集器。此外,在 Java 等语言中,我无法将文字地址分配给引用。在 C++ 中它非常灵活。

我相信 C# 两者兼备,但同样,C# 中的不安全指针是程序员的责任。

EITD::伙计们,我想问一下 C++ 指针“目前的样子”在理论上是否可以进行 GC?

最佳答案

指针算术不是根本问题。 GC 必须始终处理重新分配的指针,而指针算法只是其中的另一个例子。 (当然,如果允许在指向不同缓冲区的指针之间进行指针运算,则会导致问题,但事实并非如此。唯一允许对指向数组 A 的指针执行的运算是重新定位它的运算在那个数组中。

真正的问题是缺少元数据。 GC 必须知道什么是指针,什么不是。

如果它遇到值0x27a2c230,它必须能够确定它是否是

  • 一个指针(在这种情况下,它必须跟随指针递归地将目的地标记为“正在使用”)
  • 一个整数(相同的值是一个完全有效的整数。也许它根本不是一个指针)
  • 或者其他东西,比如说,一些字符串。

它还必须能够确定结构的范围。假设值 一个指针,并且它指向另一个结构,GC 必须能够确定该结构的大小和范围,因此它知道应该扫描哪个地址范围以获取更多指针.

GC 语言有很多基础设施来处理这个问题。 C++ 没有。

Boehm 的 GC 是您通常可以获得的最接近的,它是保守的,因为如果某物可能是一个指针,GC 会假定它是一个,这意味着一些数据不必要地保持事件状态.因此,它很可能会保留应该被 GC 处理的数据。

当然,原则上所有这些基础结构都可以添加到 C++ 编译器中。标准中没有规定不允许存在。问题是这将是一个重大的性能打击,并消除了很多优化机会。

关于c++ - GC 可以用 C++ 原始指针实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1053986/

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