在linux环境下模拟没有c标准库,创建自己的malloc和free函数,达到动态管理内存的目的。
实现过程:
阶段1:
使用数组实现固定大小的动态内存分配和回收(使用标记位显示空闲或使用)。
阶段2:
在第一步基础上,实现可变的动态内存分配和回收,增加一个位域记录内存块的大小。
阶段3:
使用两条链表实现可变长度的内存分配和回收,可任意申请和分配。
阶段4:
用hash表对空闲块链表进行优化以提高分配速度。
系统流程图如下:
阶段1部分代码:
阶段四优化后可实现:
分配的速度:用hash表进行优化后,分配速度为o(1)。
回收速度:遍历链表实现回收,回收速度为o(n)。
内存开销:hash表的内存开销,内存管理节点的内存开销。
碎片问题:根据碎片的位置进行合并,减少碎片。