0

我一直在阅读有关垃圾收集的内容,但所有描述都假定您已经实现了堆持有、分配和记忆对象。

我发现很难找到关于托管堆的经文。有人可以提几个算法、数据结构和其他资源吗?

4

1 回答 1

0

我不太确定你在这里问什么——堆的管理与实际的垃圾收集算法密切相关,所以我有点惊讶你提到的参考资料没有解释堆是如何的管理。如果您能指出您已阅读的描述,这可能会有所帮助。

我想您问题的根源可能是内存管理器实际上如何跟踪已分配的所有对象,以便它可以找到不再被引用的对象。最简单的方法是通过分配对象的链表——为指向列表中下一个对象的指针分配额外的空间,每个对象都分配了空间。

非垃圾回收内存管理器通常还会保留已释放对象的列表,但垃圾回收内存管理器通常能够避免这种情况,因为它可以识别指向特定对象的所有引用,从而允许它通过在内存中移动对象来压缩内存。因此它可以假设它总是有一个连续的空闲内存块可用,并简单地保留一个指向空闲内存开头的基指针。

本文是一个有用的起点,它解释了 .NET 中内存管理的一般原则。

于 2012-06-20T08:45:13.393 回答