zoukankan      html  css  js  c++  java
  • 一种内存池的预分配

    以前做内存池的时候,google到了 Wolf Software的Mempool Library,下载地址如下

    http://www.wolf-software.com/downloads/system-libraries/memory/mempool/

    最近抽时间将源码看了下,做了个图。

    这份实现还是很传统的,很好理解。

    有三个重要的结构

    顶端的mempool,处于中间层的mempool_table,以及最底层与实际分配相关的mempool_entry。

    下图是它们之间的关系

    1.mempool中的smallest_block和largest_block为2^n。在mempool中管理的mempool_table size也会通过calculate_memory_block_size规整到2^n。

    2.在分配的底端,都是用的C中calloc分配的。

    3.为了支持预分配,提供了mempool_preallocate_list结构

    typedef struct mempool_preallocate_list_struct
    {
      int                          size;           /*!< The size of the table (memory block). */
      int                          count;          /*!< The number of blocks to pre-allocate. */
    } mempool_preallocate_list;

    并提供了mempool_preallocate接口

    extern void     mempool_preallocate   ( mempool **pool, mempool_preallocate_list preallocate_list[] );

    4.下图是mempool提供的接口函数调用图(用GraphViz画的,含有下划线的变量名如何显示?)

     总结

    1.源码并没有考虑操作系统层面的,没有互斥等多线程支持。

    2.源码更多的在于数据结构的支持。

  • 相关阅读:
    python2
    python1
    jmeter基础使用
    LoadRuuner资源监控
    UI自动化
    MYSQL增删改查添加外键
    DW网页代码笔记
    Linux常用命令(常用)
    Linux常用命令大全(全全全!!!)
    第十二章 : shell 环境
  • 原文地址:https://www.cnblogs.com/westfly/p/2487013.html
Copyright © 2011-2022 走看看