我想知道如何使用C++全功能指针算法实现垃圾收集器.此外,在像Java这样的语言中,我无法为引用分配文字地址.在C++中它非常灵活.
我相信C#有两个,但C#中的不安全指针又是程序员的责任.
EITD ::伙计们,我问C++指针'他们目前'是否可以在理论上得到GC?
指针算术不是根本问题.GC必须处理指针一直被重新分配,指针算术只是另一个例子.(当然,如果允许指向不同缓冲区的指针之间的指针运算,它会导致问题,但事实并非如此.你可以在指向数组A的指针上执行的唯一算术是重新定位它的那些算法.在那个数组中.
在真正的问题是缺乏元数据.GC必须知道什么是指针,什么不是.
如果遇到该值0x27a2c230
,则必须能够确定它是否存在
一个指针(在这种情况下,它必须跟随指针以递归方式将目标标记为"正在使用中")
一个整数(相同的值是一个完全有效的整数.也许它根本不是一个指针)
或其他东西,比方说,一点点字符串.
它还必须能够确定结构的范围.假设值是一个指针,并指向另一个结构,GC必须能够确定该结构的大小和范围,因此它知道应该扫描哪个地址范围以获得更多指针.
GC语言有很多基础设施可以解决这个问题.C++没有.
Boehm的GC是你通常可以获得的最接近的GC,它是保守的,如果某些东西可能是一个指针,GC认为它是一个,这意味着一些数据不必要地保持活着.因此,它可能会保持数据存活,这应该是GC.
另外,当然这一切的基础设施可以在原则上被添加到C++编译器.标准中没有规则允许它不存在.问题在于它将成为主要的性能影响并消除许多优化机会.