Language agnostic 适合GC的内存堆数据结构?

Language agnostic 适合GC的内存堆数据结构?,language-agnostic,garbage-collection,heap,Language Agnostic,Garbage Collection,Heap,我一直在读关于垃圾收集的文章,但是所有的描述都假定您已经实现了一个堆,它包含、分配和记忆您的对象 我发现很难找到关于管理堆的经文。有人能提到一些算法、数据结构和其他资源吗?我不太清楚您在这里问什么——堆的管理与实际的垃圾收集算法紧密地交织在一起,所以我有点惊讶,您提到的参考没有解释堆是如何管理的。如果你能指出你读过的描述,可能会有所帮助 我猜您的问题的根源可能是内存管理器如何实际跟踪所有已分配的对象,以便找到不再被引用的对象。实现这一点最简单的方法是通过一个已分配对象的链接列表——为指向列表中下

我一直在读关于垃圾收集的文章,但是所有的描述都假定您已经实现了一个堆,它包含、分配和记忆您的对象


我发现很难找到关于管理堆的经文。有人能提到一些算法、数据结构和其他资源吗?

我不太清楚您在这里问什么——堆的管理与实际的垃圾收集算法紧密地交织在一起,所以我有点惊讶,您提到的参考没有解释堆是如何管理的。如果你能指出你读过的描述,可能会有所帮助

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

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


是解释.NET内存管理一般原则的有用起点。

指向所用资源的链接?程序员.SE?@sehe你说的“链接到所用资源”是什么意思?请不要将此作为链接列表或书籍列表。我只是想对答案中存在的可能性有一个很好的概述。我想sehe想知道你已经找到了哪些资源,以及为什么你发现它们缺乏。你是说GC使用的更原始的函数,如malloc()和free()的内部如何工作?在本例中,一本关于Linux内核和libc的书以及它们的源代码是一个很好的起点。