提问人:Sandman 提问时间:11/17/2023 更新时间:11/17/2023 访问量:28
关于使用红黑树和双向链表实现恒定时间内存合并的内存管理/空闲列表的问题
Question about memory management/free lists using Red-Black trees and Doubly linked list to achieve constant time memory coalescence
问:
前言:我正在尝试理解数据结构和算法,因为它们与内存分配策略有关。在此上下文中,存在一个大型固定大小的内存池,从中将块分配给用户/从用户中释放,类似于调用或 。malloc()
free()
通读本文:
https://www.gingerbill.org/article/2021/11/30/memory-allocation-strategies-005/
他在接近尾声时提到使用排序的双向链表在 O(1) 时间内实现合并操作。我很难想象如何应用链表来实现恒定的时间复杂度。
我的第一个想法是,列表将按每个节点指针的地址排序,以便简单的计算可以告诉您是否可以合并两个内存块,但插入将是 O(N) 操作,因为您需要找到合适的位置在新节点空闲时插入它。此外,双向链表的这种用法与本文的前半部分没有太大区别,即使用单向链表来执行内存池块的所有分配/释放。(Node + Node->size == Node->next)
有人可以澄清双链接列表与红黑树协同工作以实现 O(log(n)) 插入和删除(分别为释放和分配)以及 O(1) 合并的目的吗?
答: 暂无答案
评论