游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6564|回复: 7

[探讨]大内存块分配实现方案.

[复制链接]

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
发表于 2012-8-31 00:29:00 | 显示全部楼层 |阅读模式
以下是我的设计构思,不知道是否可行,欢迎拍砖.

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

①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种方案就可以无限扩展内存,就是只要不够用,就继续分配大内存块,麻烦之处在于,
一个大内存块要多大才合适?小了有可能都不够一次分配的,大了就会加大内存空间(因为我这个内存,一旦分配了,就不准备释放了)



各位大侠看呢?

0

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2012-8-31 16:18:00 | 显示全部楼层

Re: [探讨]大内存块分配实现方案.

为什么要分配大内存呢,目的是什么。
个人认为STL已经足够用了,而且他的内存分配也很合理 [em1]

32

主题

1259

帖子

1351

积分

金牌会员

Rank: 6Rank: 6

积分
1351
发表于 2012-8-31 16:40:00 | 显示全部楼层

Re:[探讨]大内存块分配实现方案.

大内存用磁盘映射

23

主题

515

帖子

552

积分

高级会员

Rank: 4

积分
552
发表于 2012-9-3 13:36:00 | 显示全部楼层

Re:[探讨]大内存块分配实现方案.

有一种数据结构叫做——二叉树。。。
有一种内存分配叫做——保留。。。

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2012-9-14 11:11:00 | 显示全部楼层

Re:[探讨]大内存块分配实现方案.

参照下一些引擎或库的小内存分配器吧 比如WM cocos2D-x
然后自己手动抄袭下 会发现很多很有意思的东西 嘿嘿

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-9-14 18:53:00 | 显示全部楼层

Re: Re:[探讨]大内存块分配实现方案.

无名剑: Re:[探讨]大内存块分配实现方案.

参照下一些引擎或库的小内存分配器吧 比如WM cocos2D-x
然后自己手动抄袭下 会发现很多很有意思的东西 嘿嘿



小内存块分配和大内存块的分配不一样.

5

主题

92

帖子

685

积分

高级会员

Rank: 4

积分
685
发表于 2012-9-18 10:57:00 | 显示全部楼层

Re:[探讨]大内存块分配实现方案.

马克~ 火钳刘明~

2

主题

79

帖子

83

积分

注册会员

Rank: 2

积分
83
发表于 2012-11-3 09:38:00 | 显示全部楼层

Re:[探讨]大内存块分配实现方案.

very googd
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-27 13:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表