计算机二级:内存池的C 实现代码计算机二级考试

文章作者 100test 发表时间 2009:05:07 18:54:49
来源 100Test.Com百考试题网


  最近在学习c 程序性能优化,读到内存池部分。自己动手写了一个,小小测试了一下应该没有问题。
  内存块MemoryBlock声明文件
  MemoryBlock.h
  #pragma once
  #define USHORT unsigned short
  #define ULONG unsigned long
  #include <.iostream>.
  using namespace std.
  //内存块
  struct MemoryBlock
  {
  USHORT m_nSize.//可分配内存总大小
  USHORT m_nFree.//可分配内存单元数目
  USHORT m_nFirst.//第一个可用的内存单元位置
  MemoryBlock* m_pNext.//指向下一个内存块
  char m_data[1].
  void* operator new(size_t,const USHORT&. sum,const USHORT&. unit_size)
  {
  return ::operator new(sizeof(MemoryBlock) sum*unit_size).//申请一个内存块空间
  }
  void operator 0delete(void* del,size_t)
  {
  ::operator 0delete(del).//删除内存块空间
  }
  MemoryBlock(const USHORT&. sum,const USHORT&. unit_size)
  :m_nSize(sum*unit_size),m_nFree(sum-1),m_nFirst(1),m_pNext(0)
  {
  char* pData=m_data.
  for(int i=1.i<.sum.i )//初始化1到sum-1指向
  {
  *reinterpret_cast<.USHORT*>.(pData)=i.
  pData =unit_size.
  }
  }
  ~MemoryBlock(){}
  }.
  内存池MemoryPool声明文件
  MemoryPool.h
  #pragma once
  #include "MemoryBlock.h"
  //内存池 a very good memory manager
  class MemoryPool
  {
  private:
  USHORT m_nUnitSize.//一个可分配单元的大小
  USHORT m_nInitSize.//第一个可分配空间数目
  USHORT m_nGrowSize.//新增的可分配空间数目
  MemoryBlock* m_pFirst.//指向第一个内存块
  public:
  //单元大小,第一个内存块的可分配空间数目,第二个内存块之后的可分配空间数目
  MemoryPool(const USHORT&. unit_size,const USHORT&. init_size=2048,const USHORT&. grow_size=1024).
  ~MemoryPool(void).
  void* Alloc().//分配内存
  void Free(void* pfree).//回收内存
  void FreeMemoryBlock(MemoryBlock *pblock).//销毁
  }.
  内存池MemoryPool实现文件
  MemoryPool.cpp
  #include "MemoryPool.h"
  const USHORT MEMPOOL_ALIGNMENT=2.
  MemoryPool::MemoryPool(const USHORT &.unit_size, const USHORT &.init_size, const USHORT &.grow_size)
  :m_pFirst(0),
  m_nInitSize(init_size),
  m_nGrowSize(grow_size)
  {
  if(unit_size>.4)
  {
  m_nUnitSize = (unit_size (MEMPOOL_ALIGNMENT-1)) &. ~(MEMPOOL_ALIGNMENT-1).
  //m_nUnitSize 取整到大于unit_size的最大的MEMPOOL_ALIGNMENT的倍数.
  //令人纠结的注释
  }
  else if(unit_size>.=2)
  m_nUnitSize=4.
  else
  m_nUnitSize=2.
  }

相关文章


计算机二级:内存池的C 实现代码计算机二级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛