每个链节点(也称为块)容纳一个对象,是内存分配的最小单位,其大小为sizeof(long)的2的正整数次幂 实现中限制了块大小最大值以及在一个链中块个数最大值 利用了free block来存储下一个free_block地址,节约了free block链的存储空间 memory_pool_base.h: /* * memory_pool_base.h * * Created on: 2012-...
内存池,c++ 提升不高,不过好处是可以多次申请小对象,一次释放。(只适应于无动态申请资源的class) vs2012测试情况如下: // CHchFixLenMemPool.h #pragma once #ifndef __CHchFixLenMemPool_H__ #define __CHchFixLenMemPool_H__ #include <exception> #include <new> typedef struct __HchFixLenMemPoolLinkNode...
size_t m_nFixLen;//内存池定长size_t m_nLeft;//已申请未分配个数size_t m_nExpectObjectCnt;//每次申请多少个定长的空间//当前可分配的空间指针char*m_currAllocSpace;//回收空间链表 m_next指向下一个已回收空间SHchFixLenMemPoolLinkNode *m_freeSpaceLink;//已向系统申请的空间链表//链表中每个节点均...
// 1.只有内存块列表的第一个元素是可以用于分配内存的内存块。 // 2.在整个池的析构时会把所有内存归还给堆,而不是每次释放一个对象就将其内存归还给池或堆。 // 因为之前规定只有第一个块可用于分配,若把这些内存加到第一个快会出现内存不连续的问题;若 // 将这个释放的内存当做一个新块加到池的列表...
1///2//可分为:1.内存池本身的创建和删除3//2.内存池中空闲内存的维护4//两个部分区分开,逻辑就清晰了。5//by wangpei 2015.1.46///7template <typename T>8classMemoryPool{9public:10MemoryPool(size_t size =EXSIZE);11~MemoryPool();12inlinevoid*alloca(size_t size);13inlinevoid...
固定大小对象的内存池 #include <boost/progress.hpp>template<classT>classMemoryPool {public: MemoryPool(size_t size=EXPANSION_SIZE);~MemoryPool();//从空闲列表中分配T元素inlinevoid*alloc(size_t size); inlinevoidfree(void*someElement);private:...
public: MemoryPool(size_t size=EXPAND_SIZE); ~MemoryPool(); inlinevoid*alloc(size_t size);//分配一个T类型的对象 inlinevoidfree(void*doomed);//释放一个T类型的指针 //private: enum{EXPAND_SIZE=3}; MemoryPool<T>*pNext; voidExpandFreeList(size_t num=EXPAND_SIZE); ...
public: MemoryPool(size_t size=EXPAND_SIZE); ~MemoryPool(); inlinevoid*alloc(size_t size);//分配一个T类型的对象 inlinevoidfree(void*doomed);//释放一个T类型的指针 //private: enum{EXPAND_SIZE=3}; MemoryPool<T>*pNext; voidExpandFreeList(size_t num=EXPAND_SIZE); ...