初步boost之pool图书馆学习笔记
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图书馆学习笔记的更多相关文章
- 初探boost之progress_display库学习笔记
progress_display 用途 progress_display能够在控制台上显示程序的运行进度,假设程序运行非常耗费时间,那么它能提供一个友好的用户界 面,不至于让用户在等待中失去耐心,甚至 ...
- 初探boost之timer库学习笔记
timer 使用方法 #include <boost/timer.hpp> #include <iostream> using namespace std; usi ...
- 初探boost之smart_ptr库学习笔记
概述 Boost.smart_ptr库提供了六种智能指针,除了shared_ptr 和 weak_ptr 以外还包含 scoped_ptr .scoped_array . shared_array . ...
- boost库之 shared_ptr学习笔记
- 20145230《java学习笔记》第九周学习总结
20145230 <Java程序设计>第9周学习总结 教材学习内容 JDBC JDBC简介 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作, ...
- BOOST学习笔记
BOOST学习笔记 1 tool #pragma once #include <vector> #include "boost/noncopyable.hpp" #in ...
- A.Kaw矩阵代数初步学习笔记 10. Eigenvalues and Eigenvectors
“矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...
- A.Kaw矩阵代数初步学习笔记 9. Adequacy of Solutions
“矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...
- A.Kaw矩阵代数初步学习笔记 8. Gauss-Seidel Method
“矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...
随机推荐
- SWT的TableVierer的使用一
1,简单显示,表格的式样见注释中的内容 import org.eclipse.jface.viewers.TableViewer;import org.eclipse.swt.SWT;import o ...
- 国内云存储对比: 阿里云、腾讯云、Ucloud、首都在线
阿里云的数据存储<http://www.aliyun.com/product/rds/> RDS — 关系型数据库服务(Relational Database Service,简称RDS) ...
- Codeforces #252 (Div. 2) B. Valera and Fruits
题目倒是不难,可是读起来非常恶心 依据题目的描写叙述不easy找到适合存储的方法 后来我就想不跟着出题人的思路走 我自己开一个数组c 令c[a[i]] = b[i] 则c[i] == [j] 代表第i ...
- Install Linux Kernel - AT91SAM9260EK
两.AT91SAM9260EK 2.1下载 介绍页: http://www.at91.com/linux4sam/bin/view/Linux4SAM/LegacyLinuxKernel 下载页: a ...
- Objective C (iOS) for Qt C++ Developers(iOS开发,Qt开发人员需要了解什么?)
Qt/C++开发人员眼中的Obj-C 对于我们第一次自己定义iOS应用来说,对于来自Qt/C++开发人员来说,我不得不学习Objective-C相关语法与知识 为了让读者可以更easy理解这 ...
- win8/win10/win2012r2 存储池 冗余分析
StorageSpace:a. Simple,相当于RAID0,无冗余,不考虑b. Two-way Mirror,双重镜像,至少2块盘,性能单盘,可以坏一块盘c. Three-way Mirror,三 ...
- SQLSERVER2014的内存优化表
SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据库管理系统,而使用先进内存技术来支持大规模OLTP工作负载. 就算如此, ...
- Android 省市县 三级联动(android-wheel的使用)
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23382805 今天没事跟群里面侃大山,有个哥们说道Android Wheel这个 ...
- Android Java汉字转拼音总结
转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/23187701 开发过程中有时候会遇到使用拼音模糊搜索等功能(典型的就是Andro ...
- WMI 获取硬件信息的封装函数与获取联想台式机的出厂编号方法
原文:WMI 获取硬件信息的封装函数与获取联想台式机的出厂编号方法 今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都是可以提取出来的,就自己把那些公共部分提出出来,以后如果要获取 某部分的 ...