码迷,mamicode.com
首页 > 其他好文 > 详细

初探boost之pool库学习笔记

时间:2014-07-19 02:45:05      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:boost   c++   pool   内存池   

pool

 

 

 

内存池概述

 

通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。

 

内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做的一个显著优点是尽量避免了内存碎片,使得内存分配效率得到提升。

 

 

 

pool库概述

 

pool库实现了一个快速、紧凑的内存池库,不仅能够管理大量的对象,也可以作为STL的内存分配器,某种程度上它近似于一个小型的垃圾回收机制,在需要大量分配和释放小对象时,有很高的效率,而且完全不用考虑delete。

 

pool库包括4个组件:pool 、object_pool 、singleton_pool 、pool_alloc 。

 

 

 

 

pool

 

最简单、最易使用的内存池,返回一个简单数据类型的内存指针。

在头文件 #include<boost/pool/pool.hpp>

 

 

操作函数

 

bubuko.com,布布扣

 

 

 

 

用法

 

 

#include<iostream>
#include<boost/pool/pool.hpp>
using namespace std;
using namespace boost;

int main()
{
    pool<> rpool(sizeof(int));   //定义内存池 内存块大小以int为单位
    int *p = (int *)rpool.malloc();  //void* 转换为 int*
    rpool.free(p);  //释放
    return 0;
}


注:

pool在分配失败时不会抛出异常,实际编写代码时应该检查返回的时候是否为空。

 

 

 

object_pool

 

object_pool用于对象(类实例)的内存池。

使用时包含头文件#include<boost/pool/object_pool.hpp>

 

 

操作函数

 

bubuko.com,布布扣

 

 

用法

 

 

 

#include<iostream>
#include<boost/pool/object_pool.hpp>
using namespace std;
using namespace boost;

class class_type
{
public:
    int a;
    class_type(int _a = 0):a(_a){};
};


int main()
{
    object_pool<class_type> pl; // 定义这个类的内存池
    class_type * p = pl.malloc(); //调用malloc函数 返回一个类类型的内存块 初始化该类型的指针
    cout<<p->a;  //默认是0

    p = pl.construct(100); //构造一个新对象
    cout<<p->a;
    return 0;

}


 

 

singleton_pool

 

头文件#include<boost/pool/singleton_pool.hpp>

与pool接口完全一致

 

 

 

 

pool_alloc

 

头文件#include<boost/pool/pool_alloc.hpp>

提供了两个标准容器模版参数的内存分配器pool_alloc和fast_pool_allocator

 

用法

 

 

#include<iostream>
#include<boost/pool/pool_alloc.hpp>
#include<vector>
using namespace std;
using namespace boost;



int main()
{
    vector<int,pool_allocator<int> >  v;
    v.push_back(1);
    cout<<v.size();
    return 0;
}


 

 

 

 

 

初探boost之pool库学习笔记

标签:boost   c++   pool   内存池   

原文地址:http://blog.csdn.net/wangxiaobupt/article/details/37941105

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!