pool

内存池概述

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

内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(普通情况下)的内存块留作备用。当有新的内存需求时。就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。

这样做的一个显著长处是尽量避免了内存碎片。使得内存分配效率得到提升。

pool库概述

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

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

pool

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

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

操作函数

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3hpYW9idXB0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

使用方法

#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>

操作函数

使用方法

#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图书馆学习笔记的更多相关文章

  1. 初探boost之progress_display库学习笔记

    progress_display 用途 progress_display能够在控制台上显示程序的运行进度,假设程序运行非常耗费时间,那么它能提供一个友好的用户界 面,不至于让用户在等待中失去耐心,甚至 ...

  2. 初探boost之timer库学习笔记

    timer   使用方法     #include <boost/timer.hpp> #include <iostream> using namespace std; usi ...

  3. 初探boost之smart_ptr库学习笔记

    概述 Boost.smart_ptr库提供了六种智能指针,除了shared_ptr 和 weak_ptr 以外还包含 scoped_ptr .scoped_array . shared_array . ...

  4. boost库之 shared_ptr学习笔记

  5. 20145230《java学习笔记》第九周学习总结

    20145230 <Java程序设计>第9周学习总结 教材学习内容 JDBC JDBC简介 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作, ...

  6. BOOST学习笔记

    BOOST学习笔记 1 tool #pragma once #include <vector> #include "boost/noncopyable.hpp" #in ...

  7. A.Kaw矩阵代数初步学习笔记 10. Eigenvalues and Eigenvectors

    “矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...

  8. A.Kaw矩阵代数初步学习笔记 9. Adequacy of Solutions

    “矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...

  9. A.Kaw矩阵代数初步学习笔记 8. Gauss-Seidel Method

    “矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...

随机推荐

  1. UVA 12263 Rankings(拓扑排序)

    给出一个n个数的序列1,然后有m个改动(a, b),在序列2中a跟b在序列中的相对顺序改变.求符合题意的序列2. 题中说道如果一个数的位置不确定,则输出‘?' ,仔细想想,这种情况是不会存在的,因为在 ...

  2. HttpURLConnection请求数据流的写入(write)和读取(read)

    URLConnection类给应用 程序 和web资源之间架设起了通信的桥梁,这些web资源通常是通过url来标记的,本文将讲述如何使用HttpURLConnection来访问web页面(发送数据流) ...

  3. linux下查找某个文件

    参考http://blog.csdn.net/gray13/article/details/6365654 一.通过文件名查找法: 举例说明,假设你忘记了httpd.conf这个文件在系统的哪个目录 ...

  4. LeetCode 53 Spiral Matrix

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...

  5. Android该系统提供的服务--Vibrator(振子)

    Android该系统提供的服务--Vibrator(振子) --转载请注明出处:coder-pig Vibrator简单介绍与相关方法: watermark/2/text/aHR0cDovL2Jsb2 ...

  6. Java 8 时间日期库的20个使用示例

    java 8是如何处理时间及日期的 有人问我学习一个新库的最佳途径是什么?我的回答是,就是在实际项目中那样去使用它.在一个真实的项目中会有各种各样的需求,这会促使开发人员去探索和研究这个新库.简言之, ...

  7. SQL Server 性能调优培训引言

    原文:SQL Server 性能调优培训引言 大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录. 作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤 ...

  8. Linux下一个php+mysql+nginx构建编译(三)

    在此之前一直是一个关键构建webserver.但一个关键的建筑环境都比较旧的.假定使用一个相对较新的环境,尤其是正式的server.您必须手动编译自己建(基于以下的结构linux centos6.5 ...

  9. openGL研究钞四 : 关于颜色, 尺寸, 虚线, 多边形逆转, 空洞, 使用位图

    转载请保留源,,,,hushuai1992http://blog.csdn.net/u013642494/article/category/2675731 额. 这个标题我都不知道该怎么起了. 假设没 ...

  10. PHP如何添加内置的扩展

    什么时候server上PHP已安装.需要额外补充PHP如何扩展?你并不需要再次安装PHP.同phpize我们可以在原PHP安装扩展直接的基础上,. 这次编译只不过单独编译PHP的扩展库.接下来将编译好 ...