MM是任何OS内核的一大主题。因为任何程序需要执行代码、访问数据等都必须由Mem作为一定载体,所以OS内核必须管理好各个模块所占用的Mem,并能尽量提高利用效率。
本文提出了一种内存管理的算法,在一块连续内存的头部存放VarDesc,从连续内存尾部开始分配占用实际内存的Var,这样内存管理就可以从两头向中间增长,相遇则内存分配失败,另外还要考虑内存释放时相邻区域的合并问题。笔者实现的算法目前采用的最先适用原则来匹配欲分配的内存块。算法实现细节笔者不在详述,最后会把所有源码放到GitHub上分享给大家。
有一点读者需要理解,我们平时在OS之上的C库用的malloc函数,默认是把.bss段结束后的地址对其后当做Heap来用,.bss段的结束一般是在*.ld链接脚本中定义的符号地址制定的。这里的内存管理和OS之上的内存管理只有.bss段的结束地址的形式不太一样,剩余Heap的内部管理是任何内存管理算法都通用的。