请教一下轮子哥CppGarbageCollection的原理
Closed this issue · 2 comments
hanayashiki commented
gc_ptr
如何确定root集?假如在对象的构造函数中调用 make_gc
会不会出问题?谢谢!
vczh commented
make_gc<T>
的最终目的是获取T*
和sizeof(T)
(记为A),这就构成了一个内存地址的范围。然后每一个gc_ptr<T>
内部都能用this
获取到gc_ptr<T>*
(记为B)。我就是通过计算哪些B落在哪些A里面,来最终构造出对象的关系图的。那些不在任何A里面的B,就是root。
所以这个做法其实是有缺陷的,譬如说vector<gc_ptr<T>>
就会导致GC工作不正常,所以所有的容器都得为了gc_ptr<T>
都特化一遍,这个我没有做。
hanayashiki commented
感谢轮子哥!cpp实现gc真的蛋疼,我写了一个写着玩的是用内存位置区分引用是不是在栈上,用引用的raii管理root集,当然标准的c++似乎没有提供方法判断地址是不是在栈上