`

pool对象内存池(object_pool)

阅读更多
//模板类型参数ElementType指定了要分配的元素类型,该实例不能再用于分配其它类型的对象
template<typename ElementType>
class object_pool:protected pool
{
public:
    object_pool();
    ~object_pool();

    //malloc和free并不会调用类的构造函数和析构函数
    element_type *malloc();
    void free(element_type *p);
    bool is_from(element_type *p)const;

    //construct()实际上是一组函数,它先调用malloc()分配内存,然后再在内存块上使用传入的参数
    //调用类的构造函数,返回一个已经初始化的对象指针
    element_type * construct(...);
    //先调用对象的析构函数,然后再用free()释放内存块
    void destroy(element_type *p);
};



用法
#include<boost/pool/object_pool.hpp>
#include<iostream>
#include<cassert>
#include<string>
using namespace boost;
using namespace std;

class 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();
    assert(p1.is_from(p));
    //这个时候居然还没有初始化
    cout << p->a << endl;//137028012乱七八糟的数据

    p = p1.construct(4,5,6);
    cout << p->a << endl;//4

    object_pool<string> ps;
    for(int i=0;i<10;++i){
        string *s = ps.construct("abcd");
        cout << *s << endl;
    }

    //也可以构造普通数据类型
    object_pool<int> pi;
    int *i = pi.construct(3);
    cout << *i << endl;
}
分享到:
评论

相关推荐

    改进 boost::object_pool 内存池效率问题。

    相信不少人听过 boost 委员会提过 boost 里的对象池设计存在缺陷。我花了一些时间研究它的实现,发现其在效率上确实存在严重问题。这里给出一套解决方案。在效率上有了较大提高。可以完全替换你项目里的 object_pool...

    PoolManager对象池插件

    《PoolManager对象池插件详解及实战应用》 在Unity游戏开发中,高效管理资源是提升游戏性能的关键一环。PoolManager对象池插件正是为了实现这一目标而设计的,它通过复用游戏对象,避免频繁创建和销毁,极大地提高...

    Object_Pooling_in_R_pool.zip

    Object_Pooling_in_R_pool

    内存池对象池设计

    内存池和对象池是计算机程序设计中的两种优化技术,它们主要应用于C++编程语言中,以提高内存管理和对象创建的效率。本文将深入探讨这两种设计模式,并提供如何在实际项目中应用它们的方法。 首先,我们来理解...

    commons-pool-1.6-bin_awdawd_

    Apache Commons Pool 是一个Java对象池库,主要用于管理资源,如数据库连接、线程或任何可以重用的对象。在"commons-pool-1.6-bin"这个压缩包中,包含的是Apache Commons Pool 1.6版本的二进制文件。这个库提供了...

    UE4 Actor对象池插件

    3. `PoolManager.h` 和 `PoolManager.cpp`:这可能是整个对象池系统的管理类,负责全局的对象池配置和调度。 4. `ExampleUsage.cpp` 或 `DemoLevel`: 示例代码或演示关卡,展示了如何在实际项目中使用这个插件。 ...

    Unity 工具类 之 简单的对象池管理类 ObjectPoolManager 实现

    Unity 工具类 之 简单的对象池管理类 ObjectPoolManager 实现 1、单例类,保证整个场景中只有一个类管理对象池; 2、把需要的对象以对象池形式管理起来,需要的时候 拿出来显示即可,不需要的时候隐藏以来即可; ...

    lockfree-object-pool:对象池锁释放在Rust中

    锁定免费对象池 具有自动返回的线程安全对象池集合。 一些实现是无锁的: 线性对象池 SpinLockObjectPool 其他使用std :: Mutex: MutexObjectPool 而且NoneObjectPool基本分配没有池。 用法 [ dependencies ]...

    [Unity]对象缓存池PoolManager.rar

    "PoolManager"是一个专门管理对象池的组件,通常包含以下功能: 1. 初始化池:在游戏启动时,根据预设参数预先创建一定数量的游戏对象并存储到池中。 2. 获取对象:当需要使用对象时,从池中取出一个对象,如果池为...

    C#自定义对象池

    在C#编程中,对象池是一种优化资源管理的技术,它主要用于减少对象的创建和销毁的开销。在数据库操作中,频繁地打开和关闭数据库连接会导致大量的系统资源消耗,包括内存和CPU时间。通过实现自定义的对象池,我们...

    【Unity对象池插件】Pool Spawner Pro 游戏开发常用对象池技术封装

    Pool Spawner Pro 是一款专为 Unity 游戏引擎设计的对象池(Object Pooling)解决方案。对象池技术是在游戏中管理瞬时对象的有效方法之一,特别是在需要频繁创建和销毁大量相似游戏对象(例如子弹、粒子效果、爆炸...

    Unity中对象池插件

    2. **对象复用**:当需要创建新对象时,对象池会从池中获取一个非活动对象,而不是创建新的实例,从而避免了频繁的内存分配和垃圾回收。 3. **对象回收**:当对象不再需要时,而不是立即销毁,它会被返回到对象池中...

    Object Pool 简单实现

    对象池(Object Pool)是一种设计模式,用于管理对特定类型对象的创建和复用,以减少频繁创建和销毁对象带来的开销。在某些场景下,如游戏开发、数据库连接管理和线程池等,对象的创建和销毁过程可能非常耗时,这时...

    Object Pool-Demo

    - `Object Pool_Demo.sln`:这是Visual Studio解决方案文件,用于在VS中打开和编辑Unity项目。 - `.vsconfig`:Visual Studio的配置文件,可能包含编辑器的个性化设置。 - `obj`、`ProjectSettings`、`.vs`、`.idea`...

    对象池pool项目工程.unitypackage

    对象池pool项目工程.unitypackage对象池pool项目工程.unitypackage对象池pool项目工程.unitypackage

    用Dictionary写的对象池

    - 内存占用:如果对象池过大,可能会浪费内存。 - 复杂性:可能导致代码复杂度增加,不易于理解和调试。 适用场景通常包括: - 数据库连接池:数据库连接的创建和关闭非常耗时,对象池可以提高数据库操作的效率。 ...

    Java对象池实现源码

    本篇文章将深入探讨Java对象池的实现原理,以及如何借鉴"Jakarta Commons Pool"组件来设计一个轻量级的对象池。 一、对象池的基本概念 对象池的基本工作流程包括以下几个步骤: 1. 初始化:预创建一定数量的对象并...

    Unity PoolManager v7.0.1.zip

    Unity PoolManager v7.0.1 是一个专为Unity游戏引擎设计的对象池管理插件,其主要目的是优化游戏性能,减少资源的频繁创建与销毁,从而避免内存碎片和提高游戏运行效率。对象池是一种常见的资源管理策略,尤其在处理...

    PoolManager v5.8.1

    PoolManager通过维护一个对象池,可以避免这些开销,提供更快的响应时间,并降低游戏的内存峰值。 PoolManager v5.8.1 特性包括: 1. **自动管理**:PoolManager能自动管理对象的生命周期,当对象被使用完毕后,会...

    高效的,固定大小的对象池

    描述中的"a fixed and high efficiency object pool"强调了这个对象池的两个关键特性:固定大小和高效性。固定大小意味着池的容量在初始化时就已经确定,不会随程序运行动态扩展。这样做的好处是限制了资源消耗,...

Global site tag (gtag.js) - Google Analytics