对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);

}

相关文章推荐

mempool v01

  • 2014年12月24日 20:38
  • 63KB
  • 下载

内存池(MemPool)技术详解

内存池(MemPool)技术详解 概述 内存池(MemPool)技术备受推崇。我用google搜索了下,没有找到比较详细的原理性的文章,故此补充一个。另外,补充了boost::po...

内存池(MemPool)技术详解

概述 内存池(MemPool)技术备受推崇。我用google搜索了下,没有找到比较详细的原理性的文章,故此补充一个。另外,补充了boost::pool组件与经典MemPool的差异。同时也描述了Me...

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

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

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

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

[DPDK编程手册]5Mempool库

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

内存池(MemPool)技术详解

内存池(MemPool)技术详解 fold Table of Contents 概述 经典的内存池技术 申请内存过程 释放内存过程 性能分析 boo...

图解dpdk mempool 对象

一、文件组织 rte_mempool.h:mempool类的属性、方法 rte_mempool.c:mempool对象的创建实现、mempool对象与ring对象(默认)的联系。 rte_mempo...

maven(一):是否有必要使用maven

以下是普通项目和maven项目 分别引入spring core模块的区别 1,假设我们有十个项目,都需要引入spring core模块,那么需要十份重复的Spring core.jar和...

Ghost操作系统是否有必要集成万能驱动安装环境

ghost操纵体系之以是受到接待的一个最为紧张的缘故原由便是封装,ghost win7操纵体系在安置的历程之中不但仅是会把常用的软件封装好,而且其也是会针对付当前硬件资助用户安置硬件驱动。现在ghos...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对mempool 的看法, 是否有必要实现 mempool
举报原因:
原因补充:

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