- 论坛徽章:
- 0
|
假设内存信息排序后如下:
1111111111111
22222222
333
即change point数组如下:
1SA|2SA|3SA|3EA|2EA|1EA
那么处理内存覆盖函数的流程如下:
循环1:
1SA加入 overlap_list:即overlap_list==1SA
current type = 1
新建一个内存段,并设置(开始地址为0,类型为1)
循环2:
2SA加入 overlap_list:即overlap_list==1SA,2SA
current type=2
设置上一个内存段的大小为2===>bios[0]=(开始地址0,大小2,类型1)
新建一个内存段,并设置(开始地址为2,类型为2)
循环3:
3SA加入overlap_list:即overlap_list==1SA,2SA,3SA
current type=3
设置上一个内存段的大小为1
新建一个内存段,并设置(开始地址为3,类型为3)====>bios[1]=(开始地址2,大小1,类型2)
循环4:
类存类型为3的从overlap_list中删除:即overlap_list==1SA,2SA
current type=2
设置上一个内存段的大小为3====>bios[2]=(开始地址3,大小3,类型2)
新建一个内存段,并设置(开始地址为6,类型为2)
循环5:
类存类型为2的从overlap_list中删除:即overlap_list==1SA
current type=1
设置上一个内存段的大小为4====>bios[3]=(开始地址6,大小4,类型2)
新建一个内存段,并设置(开始地址为10,类型为1)
循环6:
类存类型为1的从overlap_list中删除:即overlap_list==NULL
current type=0
设置上一个内存段的大小为3====>bios[4]=(开始地址10,大小3,类型1)
所以内存覆盖处理后的结果为:
1 111
2 2222
333 |
|