clj
C++博客
首页
新随笔
联系
聚合
管理
随笔 - 2 文章 - 0 trackbacks - 0
<
2024年12月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔档案
2009年9月 (2)
搜索
最新评论
阅读排行榜
1. 同步、异步、阻塞、非阻塞解释(1393)
2. memcached内存池测试(537)
评论排行榜
1. 同步、异步、阻塞、非阻塞解释(0)
2. memcached内存池测试(0)
memcached内存池测试
memcached修改后的内存池
修改了memcached内存池的源代码。支持单个size的slab的分配,以及多级slab分配。
以下是测试代码:
#include "slabs.h"
#include <stdio.h>
#include <sys/time.h>
#include<stdlib.h>
typedef struct item
{
int x;
double y;
char z[248];
char zz[1324];
}item;
static int xx = 0;
static double yy = 1.0;
static item *item_list[1000];
long time_interval( struct timeval tv );
int main()
{
struct timeval t_start;
gettimeofday(&t_start, NULL);
slabs_init( 1024*1024*100, 1.0, sizeof(item), 1 );
for( int i = 0; i < 100000; ++i)
{
for(int j = 0; j < 1000; ++j)
{
//item * pItem = (item *)do_slabs_alloc( sizeof(item), slabs_clsid(sizeof(item) ));
item * pItem = (item *)malloc(sizeof(item));
if(pItem == NULL)
{
printf("do_slabs_alloc error\n");
return -1;
}
pItem->x = ++xx;
pItem->y = yy + 1.0;
item_list[j] = pItem;
}
for(int k = 0; k < 1000; ++k)
{
//do_slabs_free(item_list[k], sizeof(item), slabs_clsid(sizeof(item) ));
free(item_list[k]);
}
}
long int tm = time_interval( t_start);
printf("\ntime used :%d\n", tm);
return 0;
}
long time_interval( struct timeval tv )
{
struct timeval now;
gettimeofday(&now, NULL);
long sec = now.tv_sec - tv.tv_sec;
long usec = now.tv_usec - tv.tv_usec;
return sec * 1000 + usec / 1000;
}
测试结果:
对于使用malloc, free和do_slabs_alloc,do_slabs_free
1)当外层循环10000次时,分别耗时6992ms,547ms
2)当外层循环100000次时,分别耗时69665ms,5442ms
改变item的结构:
typedef struct item
{
int x;
double y;
char z[248];
}item;
1)当外层循环10000次时,分别耗时1536ms,535ms
2)当外层循环100000次时,分别耗时15414ms,5352ms
综上:系统的malloc函数对于size很敏感,如果size较小,那么内存分配的时间需要很长,因为它需要计算,并且可能操作多个链表(malloc函数自己也对内存分级)。而内存池则对大小不敏感,对于大内存块和小内存块来说速度基本上同样快。
posted on 2009-09-17 00:06
clj
阅读(537)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理