免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1976 | 回复: 8
打印 上一主题 下一主题

内存alloc问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-29 11:02 |只看该作者 |倒序浏览
有个应用需要频繁的申请100k--500k的内存, 而且只会申请100k, 200k, 300k, 400k, 500k,申请出来的内存可能使用时间从少于1秒到最多30秒, 那么应该直接使用malloc -- free函数还是需要个内存池更好点?

论坛徽章:
0
2 [报告]
发表于 2010-04-29 11:04 |只看该作者
内存池

论坛徽章:
0
3 [报告]
发表于 2010-04-29 11:06 |只看该作者
如果恰好是100k,200k,300k,400k,500k的话自己写个内存池,以100k为最小单位 更好;

论坛徽章:
0
4 [报告]
发表于 2010-04-29 11:21 |只看该作者
如果恰好是100k,200k,300k,400k,500k的话自己写个内存池,以100k为最小单位 更好;
zxrjkl 发表于 2010-04-29 11:06



    嗯我也觉得以100k为最小单位很好,可是还没有想到一个高效的算法实现内存合并, 这些内存是拿来接收socket数据的,而且必须接收完数据后才能进行下一步处理:

对于每个tcp连接,当该socket可读时申请500k内存,读入一定的数据,分析前面4k字节看后续还有多少个字节,如果明确说明还有105k,那么我就释放掉刚刚申请的500k中的后面300k给其他连接使用,如果前面4k字节没有明确标明后续还有多少字节,则继续读数据,直到读完,这时候如果总数据量少于500k则释放掉没有使用到的内存(以100k的整数倍为释放单位),然后再分析刚刚收到的数据

总使用内存可能上G,所以上面的操作可以稍微节约点内存,关键是还没有想到高效的释放合并方法和增大内存池而不影响alloc和free时的开销

论坛徽章:
0
5 [报告]
发表于 2010-04-29 11:36 |只看该作者

论坛徽章:
0
6 [报告]
发表于 2010-04-29 11:37 |只看该作者
koolcoy跟ow俩人的想法都很先进。

论坛徽章:
0
7 [报告]
发表于 2010-04-29 11:40 |只看该作者
者有啥先进的,我都能想到,绝大多数人都能够想到这么做,可是怎么高效的实现呢

论坛徽章:
0
8 [报告]
发表于 2010-04-29 11:46 |只看该作者
就当我没说。

论坛徽章:
0
9 [报告]
发表于 2010-04-29 11:48 |只看该作者
1G分成100k也就10000块,所以简单的O(n)的算法就可以了;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP