boost之内存池
讲到内存池我们会想到对对象进行动态分配的过程new包含三个过程
1.使用operator new分配内存
2.使用placement new 初始化
3.返回内存地址。
分配内存可以分解成分配内存和获取内存两步,只是一般在一步里进行。
一.使用pool类,获取已经分配了的内存
#include <iostream>
#include <boost/pool/pool.hpp>
using namespace std;
using namespace boost; int main()
{
pool<> p1(sizeof(int));
int *p = (int*)p1.malloc();//返回内存
if (p1.is_from(p) == true)
{
cout << "hello world" <<endl;
}
return 0; }
二.object_pool从pool继承可以对进行分配的自定义类型对象初始化
#include <iostream>
#include <boost/pool/object_pool.hpp>
using namespace std;
using namespace boost; struct demo_class
{
public:
int a,b,c;
demo_class(int x = 1,int y = 2,int z=3):a(x),b(y),c(z){}
}; int main()
{
object_pool<demo_class> p1;
demo_class *p = p1.malloc();
cout << p->a <<endl;
p = p1.construct(7,8,9);
cout << p->a <<endl;
return 0; }
三.singleton_pool类似于单实例模式
#include <iostream>
#include <boost/pool/singleton_pool.hpp>
using namespace std;
using namespace boost; struct pool_tag
{ }; typedef singleton_pool<pool_tag,sizeof(int)> sp1;
int main()
{
int *p = (int*)sp1::malloc();
sp1::release_memory();//释放内存池中所有未被分配的内存
return 0; }
boost之内存池的更多相关文章
- Boost内存池使用与测试
		
目录 Boost内存池使用与测试 什么是内存池 内存池的应用场景 安装 内存池的特征 无内存泄露 申请的内存数组没有被填充 任何数组内存块的位置都和使用operator new[]分配的内存块位置一致 ...
 - 基于C/S架构的3D对战网络游戏C++框架_05搭建系统开发环境与Boost智能指针、内存池初步了解
		
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
 - boost的线程池和内存池 智能指针
		
内存池为boost自带的 #include <boost/pool/pool.hpp> 或者另外一个开源的库: nedmalloc 一个高效率的库 线程池需要下载另外一个开源库 http: ...
 - 定长内存池之BOOST::pool
		
内存池可有效降低动态申请内存的次数,减少与内核态的交互,提升系统性能,减少内存碎片,增加内存空间使用率,避免内存泄漏的可能性,这么多的优点,没有理由不在系统中使用该技术. 内存池分类: 1. ...
 - 重写boost内存池
		
最近在写游戏服务器网络模块的时候,需要用到内存池.大量玩家通过tcp连接到服务器,通过大量的消息包与服务器进行交互.因此要给每个tcp分配收发两块缓冲区.那么这缓冲区多大呢?通常游戏操作的消息包都很小 ...
 - nginx——内存池篇
		
nginx--内存池篇 一.内存池概述 内存池是在真正使用内存之前,预先申请分配一定数量的.大小相等(一般情况下)的内存块留作备用.当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续 ...
 - 不定长内存池之apr_pool
		
内存池可有效降低动态申请内存的次数,减少与内核态的交互,提升系统性能,减少内存碎片,增加内存空间使用率,避免内存泄漏的可能性,这么多的优点,没有理由不在系统中使用该技术. 内存池分类: 1. ...
 - 初识nginx——内存池篇
		
初识nginx——内存池篇 为了自身使用的方便,Nginx封装了很多有用的数据结构,比如ngx_str_t ,ngx_array_t, ngx_pool_t 等等,对于内存池,nginx设计的十分精炼 ...
 - boost之内存管理
		
内存管理一直是令C++程序员最头疼的工作,C++继承了C那高效而又灵活的指针,使用起来稍微不小心就会导致内存泄露.野指针.越界访问等访问.虽然C++标准提供了只能指针std::auto_ptr,但是并 ...
 
随机推荐
- docker run
			
1.登录Docker Hub 账户 2.输入命令:构建一个web应用. docker run -d -P training/webapp python app.py 参数说明: -d:让容器在后台运行 ...
 - html 标签  图片
			
<img src="e:/image/a.png"/> 在html中,图片是一个字符. <img src=" e:/image/a.png" ...
 - vue 深入响应式原理
			
vue最显著的特性就是不太引人注意的响应式系统(reactivity system),模型层(model)只是普通的javascript对象,修改它则更新视图view.这会让状态管理变得非常简单且直观 ...
 - FreeBSD这就是你的速度???
			
想一心一意的用一款UNIX操作系统,真不容易,FreeBSD你为啥这么坑? 用pkg安装软件,国内没有相应的源,只好从官网上下,欲哭无泪!有点怀恋CentOS的yum了,163的源,那速度杠杠滴! 先 ...
 - 2017 Wuhan University Programming Contest (Online Round) Lost in WHU 矩阵快速幂 一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开。
			
/** 题目:Lost in WHU 链接:https://oj.ejq.me/problem/26 题意:一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开. ...
 - ios 应用多语言自由切换实现
			
第一次进入应用获取本机语言.1.假设本机语言在软件实现语言列表里.则默认选中本机语言,可是用户还是能够选择其他语言.2.假设本机语言不在软件实现语言列表里,则默认选中英语.用户还是能够选择其他语言. ...
 - Java 学习笔记之读取jdbc.propertyes配置参数
			
package test; import java.io.IOException; import java.io.InputStream; import java.util.Properties; p ...
 - jvm(12)-java内存模型与线程
			
[0]README 0.1)本文部分文字描述转自“深入理解jvm”,旨在学习“java内存模型与线程” 的基础知识: [1]概述 1)并发处理的广泛应用是使得 Amdahl 定律代替摩尔定律称为计 ...
 - linux oracle 配置监听器
			
参考:http://database.51cto.com/art/201010/231338.htm 服务端: 1.增加一个listener:终端运行: $ORACLE_HOME/bin/netca ...
 - Laravel中创建控制器
			
<?php /** * Created by PhpStorm. * User: chuang * Date: 17-1-14 * Time: 下午4:29 */ namespace App\H ...