我想了解堆管理器的数据结构Java
或操作系统(如果是 C++ 或 C)会跟踪线程和进程使用的内存位置。一种方法是使用对象和内存地址的映射以及内存起始地址和内存中对象的大小的反向映射。
但在这里它将无法满足新的内存请求O(1)
时间。有没有更好的数据结构来做到这一点?
请注意,非托管语言将通过系统调用分配/释放内存,通常不会自行管理内存。尽管如此,无论抽象级别如何(操作系统到运行时),都必须处理这个问题:
一种方法称为伙伴块分配,通过以下示例很好地描述了维基百科 http://en.wikipedia.org/wiki/Buddy_memory_allocation。它本质上跟踪不同大小(通常是 2 的倍数)的内存空间的使用情况。这可以通过多个具有巧妙索引的数组来完成,或者更直观地使用二叉树来完成,每个节点告诉某个块是否空闲,同一级别上的所有节点代表相同大小的块。
这会受到内部碎片的影响;随着事情的发展和变化,您的数据可能会分散而不是有效地整合,从而使其更难以适应大数据。这可以通过更复杂的方式来应对,动态系统 http://en.wikipedia.org/wiki/Dynamic_allocation#Dynamic_memory_allocation,但好友块的优点是简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)