`

boost内存池(pool)

阅读更多
template<typename UserAllocator = ... >
class pool
{
public:
    //接受一个size_type类型的整数,指示每次分配内存块的大小(不是内存池的大小)
    explicit pool(size_type requested_size);
    ~pool();
    //返回requested_size
    size_type get_requested_size()const;

    //用void*指针返回从内存池中分配的内存块,大小为requested_size,如果分配失败返回0,不会抛出异常
    void * malloc();//从内存池中任意分配一个内存块
    void * ordered_malloc();//分配的同时合并空闲块链表
    void * ordered_malloc(size_type n);//连续分配n块内存
    bool is_from(void * chunk)const;//测试chunk是否是从这个内存池分配出去的

    /*下面的函数一般都不应该由程序员调用*/
    //一般情况下内存池会自动管理内存分配,不应该调用free(),除非内存池空间已经不足,必须释放已经分配的内存
    void free(void *chunk);
    void ordered_free(void * chunk);
    void free(void *chunk,size_type n);
    void ordered_free(void *chunk,size_type n);

    //让内存池释放所有未被分配的内存,但已分配的内存块不受影响
    bool release_memory();
    //强制释放pool持有的所有内存,不管内存块是否被使用,析构函数就是调用的purge_memory()
    bool purge_memory();
};



pool用法
#include<boost/pool/pool.hpp>
#include<iostream>
#include<cassert>
using namespace boost;
using namespace std;
int main()
{
    pool<> p1(sizeof(int));
    cout << p1.get_requested_size() << endl;//4
    //只能用如普通数据类型,不能用于复杂的类和对象,因为它只调用内存,不调用构造函数,类和对象请看object_pool
    int *p = (int *)p1.malloc();
    if(NULL==p){
        cout << "这种情况极少出现"<<endl;
        return 0;
    }
    double *d = (double *)p1.malloc();
    cout << p1.is_from(d) << endl;
    assert(p1.is_from(d));

    p1.free(p);
    for(int i=0;i<100;++i){
        p1.ordered_malloc(10);
    }
}

分享到:
评论

相关推荐

    改进 boost::object_pool 内存池效率问题。

    相信不少人听过 boost 委员会提过 boost 里的对象池设计存在缺陷。我花了一些时间研究它的实现,发现其在效率上确实存在严重问题。这里给出一套解决方案。在效率上有了较大提高。可以完全替换你项目里的 object_pool...

    boostPool部分官方文档及相关代码

    `boost::pool` 是一个通用的内存池,适用于任何大小的对象,而 `boost::singleton_pool` 是针对固定大小对象的单例内存池,适用于大量相同大小对象的情况。 `boost::pool` 的使用方法包括: 1. 定义一个对象池类,...

    C/C++内存管理机制

    本篇文章将深入探讨C/C++的内存管理机制,特别是内存池的概念,以及如何使用APR内存池和BOOST内存池。 首先,C/C++的内存分为四个主要区域:栈区、堆区、全局/静态存储区和常量存储区。栈区存储函数参数和局部变量...

    C++对象内存池 ---- C++侦探改写.rar

    此外,还有一些库如Boost.Pool提供了现成的内存池实现。 8. **应用实例**:内存池广泛应用于数据库、网络服务、游戏引擎等领域,这些场景通常涉及到大量小对象的快速创建和销毁。 总的来说,C++对象内存池是一种...

    boost threadpool(修复内存泄露后的版本)

    例如,`boost::threadpool::pool`是线程池的主要类,它提供了添加任务、启动线程池、停止线程池等方法。`pool::schedule`用于向线程池提交任务,而`pool::wait`则让主线程等待所有任务完成。 在修复内存泄漏的问题...

    boost库中文文档

    3. **内存池**:Boost库中的Pool库是一个内存管理工具,它实现了内存池的概念,可以提高内存分配和释放的效率,尤其在需要频繁创建和销毁小对象时,能显著降低系统开销。 4. **图像处理**:Boost.GIL(Generic ...

    memorypool

    内存池是一种内存管理技术,它在程序启动时预先分配一大块连续的内存空间,并将其划分为多个固定大小的小块,这些小块被称为内存池。内存池的主要目标是提高内存分配和释放的效率,减少系统调用,避免内存碎片,以及...

    Boost.org分配模块.zip

    1. **Pool Allocation**:Boost.Pool提供了一种内存池的实现,它可以提高小对象的分配速度和内存效率。内存池通过预先分配一大块内存,然后从中切割出较小的块来分配给对象,避免了频繁的小块内存分配和释放带来的...

    池内春秋.rar

    此外,还有一些开源库,如Boost库中的Pool库,提供了现成的内存池实现。 使用内存池的优点包括: 1. **性能提升**:通过批量分配和复用,减少了内存分配的系统调用,提高了程序运行速度。 2. **减少碎片**:由于...

    深入实践Boost:Boost程序库开发的94个秘笈

    Boost.Pool,实现高效内存池。 6. **并发和并行编程**:包括 Boost.ThreadPool,线程池管理;Boost.Chrono,时间点和时间段的操作;Boost.Coroutine,实现轻量级协程。 7. **算法和数据结构**:如 Boost.Graph,图...

    boost_1_58_0.tar.gz

    Boost.Pool则是内存池的实现,优化了内存分配的效率。 Boost_1_58_0版本虽然已经较早,但其包含的许多组件至今仍被广泛使用,比如Boost.Serialization、Boost.Thread和Boost.Asio等。这些组件不仅在学术研究中发挥...

    Boost C++扩展库

    Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为...Pool 内存池管理;smart_ptr 智能指针。

    twh.rar_Boost_two boost

    7. **Boost.Pool**:内存池管理库,提高内存分配和释放的效率。 8. **Boost.Spirit**:是一个高级的解析库,可以用来构建解析器和词法分析器。 【压缩包子文件的文件名称列表】: - **Rmsvc-tools.jam**:这可能是 ...

    Boost.Interprocess介绍

    2. **内存分配器**:提供了多种内存分配模式的分配器,如池分配器(`pool_allocator`),以优化性能和减少内存碎片。 3. **直接 I/O 流格式化**:`vectorstream` 和 `bufferstream` 类提供了高效的数据序列化和反...

    Boost库定制安装更新版

     内存池管理  smart_ptr  5个智能指针,学习智能指针必读,一份不错的参考是来自CUJ的文章:  Smart Pointers in Boost,哦,这篇文章可以查到,CUJ是提供在线浏览的。中文版见笔者在《Dr.Dobb's Journal软件研发...

    boost 开发 大全 ,很全的一本书

    Boost提供了多种内存管理工具,如`Boost.Pool`用于管理对象池,`Boost.SmartPtr`提供智能指针等,这些工具可以帮助开发者更高效地管理内存资源。 #### 4. **并发编程** 随着多核处理器的普及,多线程编程变得越来越...

    boost_1_53_0.tar.gz

    再者,Boost库提供了许多算法和数据结构,如Boost.Graph用于图处理,Boost.Polygon提供高效的几何计算,Boost.Pool则是内存池管理工具。这些库在特定领域具有高度优化,对理解和实现相关算法大有裨益。通过研究boost...

    C++准标准库Boost介绍

    7. **综合工具**:Conversion处理类型转换,Crc计算CRC校验,Optional提供可选值类型,Pool内存池管理,Preprocessor预处理器宏工具,Program_options命令行选项解析,Python支持C++与Python的交互,Smart_ptr智能...

    内存池管理器,资源由网络分享整理,如有侵权请联系我

    基于policy-based的内存池。 效率与boost pool略好,详情请见:http://blog.csdn.net/chenyu2202863/archive/2010/08/17/5818929.aspx。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载...

Global site tag (gtag.js) - Google Analytics