• 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;
    	
    }
    
  • 相关阅读:
    锐捷交换机密码恢复
    adobe cs3系列产品官方帮助网页(中文)
    网页设计视频教程
    锐捷交换机、路由器配置手册
    WINPE下如何直接删除联想隐藏分区?
    IWMS实现频道页面的方法
    SATA、SCSI、SAS区别与特点
    自定义系统必备
    自己写的Web服务器
    尝试MVP模式
  • 原文地址:https://www.cnblogs.com/liuweilinlin/p/3261089.html
Copyright © 2020-2023  润新知