博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初步boost之pool图书馆学习笔记
阅读量:6157 次
发布时间:2019-06-21

本文共 1719 字,大约阅读时间需要 5 分钟。

pool

 

 

 

内存池概述

 

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

 

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

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

 

 

 

pool库概述

 

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

 

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

 

 

 

 

pool

 

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

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

 

 

操作函数

 

 

 

 

 

使用方法

 

 

#include
#include
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
#include
using namespace std;using namespace boost;class class_type{public: int a; class_type(int _a = 0):a(_a){};};int main(){ object_pool
pl; // 定义这个类的内存池 class_type * p = pl.malloc(); //调用malloc函数 返回一个类类型的内存块 初始化该类型的指针 cout<
a; //默认是0 p = pl.construct(100); //构造一个新对象 cout<
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
#include
#include
using namespace std;using namespace boost;int main(){ vector
> v; v.push_back(1); cout<

 

 

 

 

 

版权声明:本文博主原创文章,博客,未经同意不得转载。

你可能感兴趣的文章
redo、undo、binlog的区别
查看>>
RecycleView设置顶部分割线(记录一个坑)
查看>>
汉字转拼音 (转)
查看>>
会计基础_001
查看>>
小程序: 查看正在写的页面
查看>>
Jenkins持续集成环境部署
查看>>
MWeb 1.4 新功能介绍二:静态博客功能增强
查看>>
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>
配置 RAILS FOR JRUBY1.7.4
查看>>
AndroidStudio中导入SlidingMenu报错解决方案
查看>>
修改GRUB2背景图片
查看>>