CUDA与内存池(二):内存池指针

本文介绍了如何将CUDA内存池设计为单例类,以便于全局访问和管理。通过创建一个指针类,简化了使用内存池时的索引操作,使其更接近C++的常规内存管理方式。尽管这需要在子类中定义专门的New和Delete函数,但测试代码显示了这种内存池管理方式的实用性和灵活性。
摘要由CSDN通过智能技术生成

前面的内存池只是提供了内存分配的功能。为了能方便地使用,还需要一些其它的设施。

单例

把内存池弄成单例类,用起来会比较方便。因为这样就可以在任何地方,通过类方法得到内存池的实例,即便内存池是在某个看不到的地方建立的。而且可以保证每种类型的池子只有一个。

单例类通常都这样实现:类里面有一个静态属性,存有一个实例,并且通过类方法访问这个实例。构造器保证实例只有一个。

template <typename T> class Singleton {
public:
    // 存储一个实例
    static T* instance;

    // 实例的访问函数
    // 懒得检查instance是否非零
    inline static T& get_instance()
    {
        return *instance;
    }

    inline static T* get_instance_ptr()
    {
        return instance;
    }

    // 构造的时候将自己存在类属性中
    Singleton()
    {
        // 其实应当先检查一下是否已经存在,如果instance已经被初始化就死掉
        instance = static_cast <T*> (this);
    }
    
    // 懒得写析构函数,析构的时候应当将instance清零

protected:
    // 不得复制
    Singleton(const Singleton<T>&);
    Singleton& operator=(const Singleton<T> &);


};

// 类属性的定义,给0初值
template <typename T>
T* Singleton<T>::instance = 0;

然后,修改一下内存池,让其继承singleton类:

template<typename T> class MemPool: public Singleton< MemPool<T> >
{
    //......
};
之后,不管在哪里就可以在任何地方通过MemPool<T>::get_instance()得到T类型的内存池实例。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值