• 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;
    	
    }
    
  • 相关阅读:
    fastclick.js插件使用
    iphone X 的适配
    常用js方法整理
    gulp(1) 的使用
    C# Datatable 添加列
    Microsoft visual studio已停止工作最全解决办法
    微服务
    获取指定页的记录
    谷歌浏览器安装ie_tab()报错The 'manifest_version' key must be present and set to 2 (without quotes)的解决办法
    Javascript常用代码汇总
  • 原文地址:https://www.cnblogs.com/liuweilinlin/p/3261089.html
Copyright © 2020-2023  润新知