免费注册 查看新帖 |

Chinaunix

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

讨论memory pool,关于对性能的影响 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-09 00:13 |只看该作者 |倒序浏览
今天把nginx server的memory pool的方式,模仿实现了一遍,用于自己的一个项目,简单测试,感觉memory pool,速度优势没有想象的大。在一台服务器上测试,分配10240000个128bytes块内存,以10M为一个预分配块(如果预分配块为1k,性能比直接用malloc还差),并自动grow,用memory pool的方式大概用了1秒,直接用malloc然后free,大概用了4秒。由于限制字数的,全部代码是发不上来的,郁闷。
#include "mem_pool.h"

#define CNT 12400000
char *addr[CNT];

int main(void)
{
    int i;
    struct _mem_pool *p;
    time_t last, cur;
    
    last = time(NULL);
    p = create_mem_pool(102400);
    
&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i < CNT; i++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addr[i] = mem_pool_alloc(p, 128);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;destroy_mem_pool(p);
&nbsp;&nbsp;&nbsp;&nbsp;p = NULL;
&nbsp;&nbsp;&nbsp;&nbsp;cur = time(NULL);
&nbsp;&nbsp;&nbsp;&nbsp;printf("[%d]\n", cur - last);

&nbsp;&nbsp;&nbsp;&nbsp;last = time(NULL);
&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i < CNT; i++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addr[i] = malloc(128);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i < CNT; i++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(addr[i]);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;cur = time(NULL);
&nbsp;&nbsp;&nbsp;&nbsp;printf("[%d]\n", cur - last);

&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}


[ 本帖最后由 rocenting 于 2009-11-9 00:24 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-11-09 09:12 |只看该作者
这个测试片面拉,从头到尾只分配,内存池的一个优点在于对频繁从池中申请释放再申请再释放内存块这样一种程序长期运行的情况可以减少内存碎片(还要看内存池实现的特点),
提高分配效率,直观的来看就是程序运行一段时间稳定后,查看系统状态,内存的使用情况很稳定。

论坛徽章:
0
3 [报告]
发表于 2009-11-09 10:44 |只看该作者
原帖由 zhoubug 于 2009-11-9 09:12 发表
这个测试片面拉,从头到尾只分配,内存池的一个优点在于对频繁从池中申请释放再申请再释放内存块这样一种程序长期运行的情况可以减少内存碎片(还要看内存池实现的特点),
提高分配效率,直观的来看就是程序运 ...



减少内存碎片很难定量得出数据的,理论上是有好处的。

我前面考虑做这个主要是提高速度的。

我见别人实现的有提高10倍的,我感觉很可疑。

论坛徽章:
0
4 [报告]
发表于 2009-11-09 12:02 |只看该作者
Glib 有自己的通用内存池。搞清楚glibc的内存池的实现的情况下,你就知道用什么样的用例,才能使malloc更糟糕,而你的更好
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP