Skip to content

Latest commit

 

History

History
38 lines (36 loc) · 1.64 KB

memory_alloc.md

File metadata and controls

38 lines (36 loc) · 1.64 KB

最先匹配分析: 在上面的例子中,我采用的配置是: Random Seed : 329 Heap Size : 1000 Bytes Heap Base : 1000 Heap Header Size : 23 Bytes Alignment : 4 Bytes List : Addrsort list Policy : First matching Do not Coalesce the free list

执行的操作如下: +4 : 申请一块4字节的空间 -> pr0 +3 : 申请一块3字节的空间 -> pr1 -0 : 释放pr0 -1 : 释放pr1 +1 : 申请一块1字节的空间 -> pr2 -2 : 释放pr2 +8 : 申请一块8字节的空间 -> pr3 +2 : 申请一块1字节的空间 -> pr4

对输出的解释如下: +4 申请一块4字节的分区,从原来1000字节的位置切除27字节(23 + 4)的分区,此时剩余分区从1027开始 +3 申请一块3字节的分区,由于4字节对齐,可最终获得4字节的空间,从原来1027字节的位置切除27字节(23 + 4)的分区,此时剩余分区从1054开始 -0 回收第一次分配的分区,此时空闲分区列表中有两项 -1 回收第二次分配的分区,此时空闲分区列表中有三项 +1 同3字节的分区一样,由于4字节对齐,可最终获得4字节的空间,此时空闲分区有三个,由于最先匹配的缘故,选择了第一个空闲分区 -2 回收第三次分配的分区,此时空闲分区列表中有三项 +8 申请一块8字节的分区,加上堆头需要31字节空间,便利此时根据地址排序的列表,知道最后一项才找到合适的分区,在这个合适的分区中切除31字节,剩下的部分从1085开始(1054 + 31) +2 申请一块2字节的分区,和原来一样,最终获得4字节空间,由于最先匹配原则,直接将第一个空闲分区分配即可