`

boost singleton_pool与pool_alloc

阅读更多
//Tag仅仅是用于标记不同的单件,可以是空类,甚至是声明
//第二个参数RequestedSize等同于pool构造函数中的整数requested_size,指示分配内存块的大小
template<typename Tag,unsigned RequestedSize>
class singleton_pool
{
public:
    static bool is_from(void * ptr);
    static void * malloc();
    static void * ordered_malloc();
    static void * ordered_malloc(size_type n);

    static void free(void * ptr);
    static void ordered_free(void * ptr);
    static void free(void *ptr,std::size_t n);
    static void ordered_free(void *ptr,size_type n);

    static bool release_memory();
    static bool purge_memory();
};



用法:
#include<boost/pool/singleton_pool.hpp>
#include<boost/pool/pool_alloc.hpp>
#include<iostream>
#include<vector>
using namespace boost;
using namespace std;

class poolTag{};

typedef singleton_pool<poolTag,sizeof(int)> pl;

/*
    pool_alloc提供了两个可以用于标准容器模板参数的内存分配器,分别是
    pool_alloc和fast_pool_alloc,它的行为与pool,object_pool...
    的一点不同是:当内存分配失败后会抛出std::bad_alloc异常,需要包含
    <boost/pool/pool_alloc.hpp>
*/
int main()
{
    int *p = (int *)pl::malloc();
    pl::release_memory();
    cout << *p << endl;

    //使用pool_allocator代替标准容器默认的内存分配器
    //vector将使用新的分配器良好工作
    vector<int,pool_allocator<int> >v;
    v.push_back(10);
    cout << v.size() << endl;
}

分享到:
评论

相关推荐

    boostPool部分官方文档及相关代码

    `boost::pool` 是一个通用的内存池,适用于任何大小的对象,而 `boost::singleton_pool` 是针对固定大小对象的单例内存池,适用于大量相同大小对象的情况。 `boost::pool` 的使用方法包括: 1. 定义一个对象池类,...

    C++、MFC源代码Singleton_demo

    【标题】"C++、MFC源代码Singleton_demo"是一个示例项目,它演示了如何在C++和Microsoft Foundation Classes (MFC)框架下实现单例设计模式。单例模式是一种常用的软件设计模式,用于确保一个类只有一个实例,并提供...

    单例极致 singleton C++

    1、没有构造函数(DEFINE_SINGLETON_DEFAULT); 2、有构造函数,构造函数没有参数(DEFINE_SINGLETON_CONSTRUCT_NO_PARAM); 3、有构造函数,构造函数有没有参数版本(DEFINE_SINGLETON_CONSTRUCT_WITH_DEFAULT)...

    singleton_单例模式_java_设计模式_

    private static final Singleton INSTANCE = new Singleton(); } private Singleton() {} public static Singleton getInstance() { return SingletonHolder.INSTANCE; } } ``` 2. 懒汉式(Lazy ...

    M2_Singleton_单例模式_java_powder53m_arrow51c_

    与静态常量类似,只是将实例化放在静态代码块中,同样保证了线程安全。 ```java public class Singleton { private static Singleton INSTANCE; static { INSTANCE = new Singleton(); } private Singleton() ...

    singleton_code.zip

    文件名 : Singleton1.java 文件名 : Singleton2.java 文件名 : Singleton3.java 文件名 : Singleton4.java 文件名 : Singleton5.java 文件名 : Singleton6.java 文件名 : TestSingleton1.java 文件名 : ...

    C++设计模式课件12_Singleton_单件模式.pdf

    ### 单件模式(Singleton Pattern)详解 #### 概述 单件模式是软件设计模式中最为基础且应用广泛的一种模式。它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。此模式通常用于那些需要频繁创建、消耗...

    singleton_crash:演示由多个动态库链接的静态库中的单例导致的崩溃

    标题和描述所提到的"singleton_crash"就是这种情况的一个实例,它探讨了当静态库被多个动态库链接时,单例模式可能导致的崩溃问题。 在C++编程中,静态库和动态库有着不同的加载和链接机制。静态库在编译时会被直接...

    singleton_duplication:在Windows上链接在一起的共享库中使用时,单例的复制

    singleton_duplication 正确Linux工具链将为您带来意想不到的结果: Singleton()[94174823866848] 'unset' =&gt; 'before main'[94174823866848] 'before main' =&gt; 'lib a'[94174823866848] 'lib a' =&gt; 'lib b'...

    Android Singleton单例模式Demo

    在Android开发中,单例模式(Singleton)是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式在管理共享资源、控制并发以及减少对象创建的开销等方面非常有用。本篇文章将深入讲解...

    Singleton_Pattern_[removed]使用 ES6 在 JavaScript 中实现单例类

    Singleton_Pattern_JavaScript使用 ES6 类在 JavaScript 中实现单例类。类名:ThemeSettings。 该类具有三个属性:颜色、字体和布局专业软件工程师单元 (PSEU) 培训的一部分

    单例实现源码singleton-C++

    以下是对"单例实现源码singleton-C++"的详细解析。 1. **静态成员变量法** 这是最常见的单例实现方式。在类中定义一个静态成员变量,该变量保存唯一的实例。例如: ```cpp class Singleton { public: static ...

    topmed_singleton_clusters

    使用指数混合模型为单身距离分布建模的代码,如所示预处理从输入VCF文件过滤和注释单例需要几个预处理步骤。 预处理脚本和说明位于process_data目录中。分析数据准备好后, scripts目录中的scripts将适合指数混合...

    HttpClient动态加载网络图片

    //加载一个网络图片 WebSprite* webimg = WebSpriteAgentInst-&gt;createWebSprite("hello","url.png"); this-&gt;addChild(webimg); webimg-&gt;setPosition(visibleSize/2);...#endif //__SINGLETON_H__

    C++完美实现Singleton模式

    #define DECLARE_SINGLETON_CLASS(type) \ friend class auto_ptr; \ friend class Singleton; } } ``` 此模板化实现极大地简化了代码,并保持了Singleton模式的核心特性。 #### 五、线程安全 在多线程环境中...

    C/C++内存管理机制

    Boost Pool提供了多种类型的内存池,如singleton_pool和object_pool,可以根据需求选择合适的内存管理策略。使用内存池可以显著提高内存分配和释放的效率,减少系统调用次数,降低程序的内存开销。 shared_ptr是C++...

    looksee:IRB中的增压方法自省

    __id__ initialize method_missing singleton_method_undefined != __send__ instance_eval singleton_method_added == equal? instance_exec singleton_method_removed Kernel !~ enum_for

    C#设计模式之Singleton模式

    ### Lazy初始化与`System.Lazy&lt;T&gt;` C# 4.0引入了`Lazy&lt;T&gt;`类,可以方便地实现线程安全的延迟初始化: ```csharp class Singleton { private static readonly Lazy&lt;Singleton&gt; _instance = new Lazy&lt;Singleton&gt;(()...

    patterns_design

    2. **Singleton_Accessor(单例访问类)**:提供了外部访问单例实例的接口。 #### 协作关系 客户端仅能通过 `Singleton` 类中的 `Instance` 方法来访问单例实例。这样做的目的是为了确保在任何情况下,都只能通过...

Global site tag (gtag.js) - Google Analytics