对mempool 的看法, 是否有必要实现 mempool

原创 2012年03月31日 12:50:54

测试系统:

系统:uname -a
Linux debian 2.6.32-5-amd64 #1 SMP Mon Jan 16 16:22:28 UTC 2012 x86_64 GNU/Linux


cpu: cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
      2  Intel(R) Core(TM)2 Duo CPU     P8700  @ 2.53GHz

mem:cat /proc/meminfo
MemTotal:        4030064 kB
MemFree:         1713340 kB
Buffers:           77660 kB
Cached:           629620 kB
SwapCached:            0 kB



想在自己的应用中实现mempool ,以测试的结果来看,实现的必要性不是太大;


malloc 1000 * 10000 ,用时 25 s

malloc 100 * 10000 ,用时 2 s

更多的测试,有兴趣的朋友可以试试。




测试结果:

测试1: 每次申请 1000个内存块,大小随机,  

int mem_pool[] = {1024, 2048, 4096, 8192,
                10240, 20480, 40960, 81920,
                102400, 204800, 409600, 819200,
                1024000}

const int const malloc_count = 1000;

gcc -g -o testmalloc memmalloc.c && ./testmalloc
malloc 1000 * 10000 ,用时 25 s



测试2:每次申请 100个内存块,大小随机,  

int mem_pool[] = {1024, 2048, 4096, 8192,
                10240, 20480, 40960, 81920,
                102400, 204800, 409600, 819200,
                1024000}

const int const malloc_count = 100;

gcc -g -o testmalloc memmalloc.c && ./testmalloc

malloc 100 * 10000 ,用时 2 s




测试代码如下:


#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <sys/time.h>

int main(){
        const int const count =10000;
        const int const malloc_count = 1000;
        int mem_pool[] = {1024, 2048, 4096, 8192,
                10240, 20480, 40960, 81920,
                102400, 204800, 409600, 819200,
                1024000};
        int i, j;
        const int const mem_pool_count = 13;
        int *p_data[malloc_count];
        struct timeval tv, tv2;
        struct timezone tz, tz2;
        gettimeofday (&tv , &tz);

        for (i = 0; i < count; ++i){
                for (j = 0; j < malloc_count; ++j){
                    p_data[j] = (int *) malloc(mem_pool[rand() % mem_pool_count]);
                }

                for (j = 0; j < malloc_count; ++j){
                    free(p_data[j]);
                }
        }

        gettimeofday (&tv2 , &tz2);
        
        printf("malloc %d * %d ,用时 %u s\n", malloc_count, count, tv2.tv_sec - tv.tv_sec);

}

Vxworks启动代码usrRoot()函数分析(二)

这两天都很忙,差点忘了自己的方向。偶尔看到一个视频问人的梦想是什么?突然为之一振,说的很好,梦想就是做让人坚持而感到幸福的事。          接着看usrRoot这个函数,说实话这个函数真是...
  • yinyansiniye
  • yinyansiniye
  • 2014年12月14日 18:28
  • 336

[DPDK编程手册]5Mempool库

内存池就是一个大小固定的对象的分配器。在DPDK中,内存池用名称进行标识,并且通过使用内存池的处理程序来存储空闲对象。默认情况下,内存池的处理程序是基于环的,并且也提供了一些可选的服务:如核心对象缓存...
  • zhaoyaxuan001
  • zhaoyaxuan001
  • 2017年06月11日 13:51
  • 248

DPDK 内存管理(二)(rte_mempool 内存管理)

DPDK以两种方式对外提供内存管理方法,一个是rte_mempool,主要用于网卡数据包的收发;一个是rte_malloc,主要为应用程序提供内存使用接口。本文讨论rte_mempool。rte_me...
  • xy010902100449
  • xy010902100449
  • 2015年08月04日 21:31
  • 3300

C/C++的内存泄漏检测工具Valgrind memcheck的使用经历

Linux下的Valgrind真是利器啊(不知道Valgrind的请自觉查看参考文献(1)(2)),帮我找出了不少C++中的内存管理错误,前一阵子还在纠结为什么VS 2013下运行良好的程序到了Lin...
  • lanxuezaipiao
  • lanxuezaipiao
  • 2014年03月18日 21:46
  • 5061

VxWorks之认识

VxWorks之认识        Tornado是WindRiver公司开发的用于嵌入式开发的一组产品,它包括32位实时操作系统VxWorks,集成开发环境(IDE,包括编译器等)。下面是我阅读完...
  • qq_24373811
  • qq_24373811
  • 2016年12月23日 17:22
  • 659

slab内存分配------内存池mempool

一:概述 采用伙伴算法分配内存时,每次至少分配一个页面。但当请求分配的内存大小为几十个字节或几百个字节时应该如何处理?如何在一个页面中分配小的内存区,小内存区的分配所产生的内碎片又如何解决?Li...
  • cgm88s
  • cgm88s
  • 2014年04月03日 17:19
  • 2005

单元测试有必要吗

单元测试,是对程序中的最小单元进行测试,一般是函数。通过比较函数的返回值和期望值,来断定测试是否通过。...
  • wp270280522
  • wp270280522
  • 2015年10月08日 17:18
  • 589

MySQL 性能优化的最佳20多条经验分享

当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这...
  • bigtree_3721
  • bigtree_3721
  • 2016年05月31日 00:41
  • 243

[RTT例程练习] 3.3 静态内存管理,内存池mempool

内存池是一种静态的内存管理方法。它预先将一块固定连续的内存区域划分成几个大小不同的块。使用者申请时就将对应大小的内存块给他。这种方法的优点是不会有内存碎片,但不够灵活,适用于需要频繁存取的场合,例如b...
  • lyyyuna
  • lyyyuna
  • 2013年04月07日 13:16
  • 1826

怎样建索引及索引的分类,索引有什么好处,要注意一些什么问题,如会不会影响其他表?

1) 建索引语法:create index dept_unique_idx on dept(dept_no) tablespaceidx_1;        2) 索引的分类:        逻辑...
  • Puzzle_48hcy
  • Puzzle_48hcy
  • 2017年05月19日 23:46
  • 397
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对mempool 的看法, 是否有必要实现 mempool
举报原因:
原因补充:

(最多只允许输入30个字)