Memory 伙伴内存分配

Memory 伙伴内存分配,memory,memory-management,operating-system,allocation,Memory,Memory Management,Operating System,Allocation,我有一个大小为n的数组,它代表我的主内存。我不能使用运算符new,我只能访问那个内存,所以每个数据结构必须只使用那个数组来存储数据。我正在尝试构建内存分配器,它将能够快速找到该内存(数组)的可用部分并释放它们。我想在该阵列上构建树结构-伙伴内存分配-但我很难理解几个概念 buddy系统是如何使用二叉树查找空闲内存块的 我应该如何在数组中存储此树 如何创建树的新节点(我应该在程序开始时为树保留足够的空间,还是动态地“分配”它?但如何简单地做到这一点) 我对这些问题有点了解,但我很难完全理解。我将感

我有一个大小为n的数组,它代表我的主内存。我不能使用运算符new,我只能访问那个内存,所以每个数据结构必须只使用那个数组来存储数据。我正在尝试构建内存分配器,它将能够快速找到该内存(数组)的可用部分并释放它们。我想在该阵列上构建树结构-伙伴内存分配-但我很难理解几个概念

buddy系统是如何使用二叉树查找空闲内存块的

我应该如何在数组中存储此树

如何创建树的新节点(我应该在程序开始时为树保留足够的空间,还是动态地“分配”它?但如何简单地做到这一点)

我对这些问题有点了解,但我很难完全理解。我将感谢每一个明确的答案和帮助。多谢各位

  • 看一看。此结构表示一棵树 在数组中
  • 看看Aleksandrescu的小对象分配器。在第二章(AFAIR)中,他描述了一种在外部字节数组中嵌入~8-~128字节长结构的实用方法,而无需任何开销

  • 谢谢你的回答。还有一件事-我如何在这个树中搜索空闲内存块,因为节点只包含关于其大小的信息,以及它是拆分节点、空闲节点还是占用节点(使用这个节点表示的内存)。我应该只搜索特定的内存块吗?如果它被占用,我应该进一步搜索,还是将一些较大的空闲内存块划分为较小的内存块并进行分配?同样,请阅读Aleksandrescu书的第二章-他描述了一种在特殊格式化的外部字节数组中查找未占用内存块的算法(零开销,因为他的方法只有自由块包含格式,非自由块只包含数据)。