以下是我的设计构思,不知道是否可行,欢迎拍砖.

我这个大内存块分配是通过用链表的方式来标记每一区间字节的使用状况的,因为用链表可以方便的合并闲置内存区间.
链表的每一节点代表一个内存区间(起始字节和结束字节),同时还有使用状态(闲置和已用),
下面是一个简单的描述:

①1个1000字节大小的内存块初始状态:
链表节点1:起始字节0,结束字节1000 状态:闲置


②分配200大小字节:
实现步骤:
1:查找闲置内存块,若找到符合大小的节点则进入第2个步骤,否则查找失败
2:修改结束字节为使用后的大小,同时插入链表2,并设置起始字节和结束字节

结果:
链表节点1:起始字节0,结束字节199 状态:已用(这个是新分配的)
链表节点2:起始字节200,结束字节1000 状态:闲置


③分配100字节

实现步骤同②

结果:
链表节点1:起始字节0,结束字节199 状态:已用
链表节点2:起始字节200,结束字节299 状态:已用(这个是新分配的)
链表节点3:起始字节300,结束字节1000 状态:闲置


③删除[200,299]处的字节
实现步骤:
1:遍历到[200,299]节点处
2:删除当前节点,并判断:若下一节点为闲置状态,则修改下一节点,将删除的大小
累加到上面,然后继续判断下一节点是否为闲置,直到下一节点为已用,停止合并

结果:
链表节点1:起始字节0,结束字节199 状态:已用
链表节点2:起始字节200,结束字节1000 状态:闲置




总结:
只有1个问题需要思考,那就是如何预分配大内存块?有两个方案:
1:初始化的时候分配一次足够大的内存
2:分配N个大内存块

想来想去,还是觉得第2种方法可行,因为第1种就算再大,也可能会出现内存不足的情况,
而第2种方案就可以无限扩展内存,就是只要不够用,就继续分配大内存块,麻烦之处在于,
一个大内存块要多大才合适?小了有可能都不够一次分配的,大了就会加大内存空间(因为我这个内存,一旦分配了,就不准备释放了)



各位大侠看呢?锐亚教育

锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛