boost-pool用法介绍

原创 2013年12月04日 16:26:22

1.内存池是预先分配一块大的内存空间,然后可以再其中使用某种算法实现高效快速的自定制内存分配。内存池能够管理大量的对象,而且在需要大量地分配/释放小对象时很有效率,完全不用考虑delete,它近似于一个小型的垃圾回收机制。

一、pool类

pool类是一个可以返回POD的内存指针。位置:#include <boost/pool/pool.hpp>

类摘要:

template <typename UserAllocator = default_user_allocator_new_delete>
class pool
{
  private:
    pool(const pool &);
    void operator=(const pool &);

  public:
    explicit pool(size_type requested_size);//构造函数接受一个size_type类型的整数,表示分配内存块的大小(不是pool的大小)
    ~pool();

    bool release_memory();
    bool purge_memory();m 

    bool is_from(void * chunk) const;
    size_type get_requested_size() const;

    void * malloc();
    void * ordered_malloc();
    void * ordered_malloc(size_type n);

    void free(void * chunk);
    void ordered_free(void * chunk);
    void free(void * chunks, size_type n);
    void ordered_free(void * chunks, size_type n);
};
int main()
{
	pool<> p1(sizeof(int));//设定每次分配的大小为int大小。
	int *p = (int*)p1.malloc();//内存分配函数。用void*返回。

	p1.free(p);//规划内存给内存池。
	p1.is_from(p); //测试是否是从该pool中分配出去的。

	p1.ordered_malloc(10);//连续分配n块内存。
}
2.(最有用的) object_pool是用于类实例对象的内存池,与pool类似,但是析构时对所有分配的内存块调用析构函数。但是它的特殊之处在于:construct()和destroy()函数,construct()有多个参数的重载形式,它调用malloc()分配内存,然后在内存池中出入参数调用类的构造函数,返回的是一个已经初始化的对象的指针,destory()则先调用对象的析构函数,然后再用free()释放内存块。
位置:#include <boost/pool/object_pool.hpp>
template <typename ElementType, typename UserAllocator = default_user_allocator_new_delete>
class object_pool
{
  public:
    object_pool();
    ~object_pool();

    element_type * malloc();
    void free(element_type * p);
    bool is_from(element_type * p) const;

    element_type * construct();
    // other construct() functions
    void destroy(element_type * p);
};类似pool的用法。
#include <iostream>
#include <boost/smart_ptr.hpp>
#include <boost/pool/pool.hpp>
#include <boost/pool/object_pool.hpp>

using namespace boost;
using std::cout;
using std::endl;
using std::string;

class test
{
public:
    int a, b, c;
    test(int a1=1, int b1=2, int c1=3) : a(a1), b(b1), c(c1){}
    void display()
    {
        cout<<a<<endl;
        cout<<b<<endl;
        cout<<c<<endl;
    }
	~test()
	{
		cout<<"test, destory()"<<endl;
	}
};

int main() 
{
    object_pool<test> p1;    
    test *p = p1.malloc();
    p->a = 11, p->b = 22, p->c = 33;
    p->display();//11 22 33

    test *t = p1.construct(7, 8, 9);//调用构造函数构造一个初始化的对象。
    t->display();//7 8 9
	p1.destroy(p);//先调用析构函数,然后free内存返回给pool。
}


                    

相关文章推荐

boost编译工具-bjam用法介绍

  • 2011年04月16日 22:03
  • 216KB
  • 下载

boost.asio服务器使用io_service作为work pool

使用io_service作为处理工作的work pool,可以看到,就是通过io_service.post投递一个Handler到io_service的队列,Handler在这个io_service....

boost::pool与内存池技术

建议看这个链接的内容:http://cpp.winxgui.com/cn:mempool-example-boost-pool     Pool分配是一种分配内存方法,用于快速分配同样大小的...

实现boost::obj_pool,大神请绕道

直接上代码 #ifndef BOOST_OBJECTPOOL_HPP #define BOOST_OBJECTPOOL_HPP #include #include #if defined...

boost库学习之 pool库

简单来说内存池预先分配了一块大的内存空间,然后在其中使用某种算法高效快速的自定制内存分配。pool库包含四个组成部分,最简单的pool,分配类实例的object pool,单件内存池singleton...

定长内存池之BOOST::pool

定长内存池 BOOST::pool
  • byxdaz
  • byxdaz
  • 2011年01月19日 22:58
  • 9322

boost的pool内存池

参考《boost程序库开发完全指南》 //pool_func_eg.h #pragma once #include #include using namespace boost; void eg()...

关于boost库里的内存池pool

内存池是一种可以提高程序效率的一种途径,内存是提高的地方就是一次申请一块较大的内存,在你后面使用的时候就直接在申请好的内存中申请使用即可,省去了每次单独申请空间时间。也避免了内存碎片,当申请的内存足够...

Boost pool库导引

作为一名C\C++程序员,我们无数次的与动态分配内存打过交道,可能我们已经习惯于使用new和delete关键字来申请与回收内存,但是在某些程序中我们可能会因为使用new和delete而惹来麻烦,我之前...

Boost 内存管理(smart_ptr库,pool库)

1. RAII机制为了管理内存等资源,C++程序员通常采用RAII机制(资源获取即初始化,Resource Acquisition Is Initialization),在使用资源的类的构造函数中申请...
  • yvhqbat
  • yvhqbat
  • 2016年07月07日 15:32
  • 147
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:boost-pool用法介绍
举报原因:
原因补充:

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