我最近在一次采访中被问到如何用c ++实现垃圾收集器。
我的回答是在分配的空间中预先分配了内存池和构造对象。还用于存储分配给指针所指向的存储器位置之前的字节中的对象的存储器的大小。
面试官对答案并不满意。
我后来意识到我的解决方案实际上是试图通过预先分配内存池并使用该内存来避免垃圾收集器的主要目标。
但我认为用C ++实现垃圾收集器很困难而不必修改编译器。
有什么建议吗? 在此先感谢!!!
修改 似乎其他人也面临着类似的问题,而且很多聪明的家伙已经放弃了他们的观点here
答案 0 :(得分:2)
我认为面试官正在寻找智能指针,因为这是语言能做的最好的,即使这样,它也需要程序员的一定程度的关注。在CS意义上,这不是适当的GC。
答案 1 :(得分:2)
您可以阅读shared_ptr结构。
它实现了一个简单的reference-counting垃圾收集器。
如果你想要一个真正的垃圾收集器,你可以重载 new 运算符。
创建一个类似于shared_ptr的结构,称之为Object。
这将包装创建的新对象。现在,通过重载其运算符,您可以控制GC。
现在你需要做的只是实现众多GC algorithms
中的一个