Skip to content

mnmlyn/MemoryAllocator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MemoryAllocator

没有虚存功能的内存管理系统

被要求设计一个内存管理程序,这是操作系统大作业吧,要求20分钟写出来,真是太严格了。

  • 自己写一个吧~~~

问题描述

要求:

给定一块内存,实现该内存块上的malloc、free、realloc等函数,不能再动态分配内存,可以使用O(1)的栈和全局空间。

算法思路:

  1. 设定最小分配单元,一次只能分配2的幂次个最小分配单元的内存。
  2. 用一个数组(链表的数组),记录不同幂次的空闲内存块。
  3. 每一个最小分配单元,都对应有一个字节的开销,记录其是否空闲以及空闲块的大小。连续可合并的空闲块,只记录在第一个块开销中。
  4. 初始化时,从尽可能大的空闲块开始
  5. 分配时,找到最小可满足需求的块,切分为刚好满足需求的2幂次大小,将切分后多余的块存入空闲数组的对应链中。
  6. 释放时,若其伙伴块为free状态,合并,直到伙伴不为free

说明

  1. 使用buddy伙伴算法来对给定的大块内存进行管理
  2. 参考sqlite3中mem5的实现
  3. 使用gtest进行单元测试,安装方法请参考link

About

没有虚存功能的内存管理系统

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published