目的
1、防止内存频繁 游走在new和delete中被折磨;
2、减少内存碎片的产生,同时稍稍的提高下性能。
思路
1、外界有内存需求的时候,就去memory_pool获取;
2、外界用完某块内存之后,就归还memory_pool;
3、memory_pool 这个类来管理内存。
代码
#ifndef MEMORY_POOL_H__
#define MEMORY_POOL_H__
#include <deque>
#include <memory>
template <class T>
class memory_pool
{
memory_pool(const memory_pool&) = delete;
const memory_pool& operator=(const memory_pool&) = delete;
public:
memory_pool() {
// nothing
}
~memory_pool()
{
clear();
}
std::shared_ptr<T> allocate()
{
std::shared_ptr<T> item = nullptr;
if (!free_items_.empty())
{
item = free_items_.front();
free_items_.pop_front();
}
else
{
item = std::make_shared<T>();
}
return item;
}
void release(const std::shared_ptr<T>& item)
{
free_items_.push_back(item);
}
void clear()
{
free_items_.clear();
}
int size()
{
return free_items_.size();
}
private:
std::deque<std::shared_ptr<T>> free_items_;
};
#endif
简单示例
memory_pool<Cls> memory_pool_;
void test()
{
auto& value = memory_pool_.allocate();
.......
memory_pool_.release(value );
}