必胜高考网_全国高考备考和志愿填报信息平台

必勝高考網 > 計算機類 > 計算機等級 > 資訊 >

計算機等級考試內存池的C++實現代碼

時間: 未知2 資訊

  MemoryBlock.h

  #pragma once

  #define USHORT unsigned short

  #define ULONG unsigned long

  #include

  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 delete(void* del,size_t)

  {

  ::operator delete(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

  {

  *reinterpret_cast(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;

  }

  void* MemoryPool::Alloc()

  {

  if(!m_pFirst)//如果是第一次申請

  {

  MemoryBlock* pmb_first=new (m_nInitSize,m_nUnitSize)MemoryBlock(m_nInitSize,m_nUnitSize);//14日凌晨至此

  m_pFirst=pmb_first;

  return (void*)pmb_first->m_data;

  }

  MemoryBlock* pmb_block=m_pFirst;

  while(pmb_block&&pmb_block->m_nFree==0)//pmb_block沒走到最后并且當前block沒有可分配結點

  {

  pmb_block=pmb_block->m_pNext;//往后走吧。

  }

  if(pmb_block)//如果找到可分配結點的block

  {

  char* pfree=pmb_block->m_data+(pmb_block->m_nFirst*m_nUnitSize);

  pmb_block->m_nFirst=*((USHORT*)pfree);

  pmb_block->m_nFree--;//可分配節點自減

  return (void*)pfree;

  }

  else//如果找不到,此時pmb_block值為0

  {

  if(m_nGrowSize==NULL)

  return NULL;

  pmb_block=new (m_nGrowSize,m_nUnitSize)MemoryBlock(m_nGrowSize,m_nUnitSize);

  if(!pmb_block)//new不成功

  return NULL;

  pmb_block->m_pNext=m_pFirst;//把新建的block放到最前吧

  m_pFirst=pmb_block;

  return (void*)pmb_block->m_data;

  }

  }

  void MemoryPool::Free(void* pfree)

  {

  if(m_pFirst==NULL)

  return;

  MemoryBlock* pmb_block=m_pFirst;

  MemoryBlock* pmb_preblock=m_pFirst;

  while((ULONG)pfree<(ULONG)pmb_block->m_data||

  (ULONG)pfree>(ULONG)(pmb_block->m_data+pmb_block->m_nSize))//pfree不在當前block中

  {

  pmb_preblock=pmb_block;//前一個block塊

52765 主站蜘蛛池模板: 定制/定做冲锋衣厂家/公司-订做/订制冲锋衣价格/费用-北京圣达信 | 软启动器-上海能曼电气有限公司 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 视频直播 -摄影摄像-视频拍摄-直播分发 | 电竞学校_电子竞技培训学校学院-梦竞未来电竞学校官网 | 医用空气消毒机-医用管路消毒机-工作服消毒柜-成都三康王 | 有源电力滤波装置-电力有源滤波器-低压穿排电流互感器|安科瑞 | 多功能干燥机,过滤洗涤干燥三合一设备-无锡市张华医药设备有限公司 | 聚合氯化铝价格_聚合氯化铝厂家_pac絮凝剂-唐达净水官网 | 石家庄装修设计_室内家装设计_别墅装饰装修公司-石家庄金舍装饰官网 | 土壤养分检测仪|土壤水分|土壤紧实度测定仪|土壤墒情监测系统-土壤仪器网 | 骨密度检测仪_骨密度分析仪_骨密度仪_动脉硬化检测仪专业生产厂家【品源医疗】 | 数显水浴恒温振荡器-分液漏斗萃取振荡器-常州市凯航仪器有限公司 | 智能气瓶柜(大型气瓶储存柜)百科 | 无轨电动平车_轨道平车_蓄电池电动平车★尽在新乡百特智能转运设备有限公司 | 大倾角皮带机-皮带输送机-螺旋输送机-矿用皮带输送机价格厂家-河南坤威机械 | 三轴曲线机-端子插拔力试验机|华杰仪器 | 急救箱-应急箱-急救包厂家-北京红立方医疗设备有限公司 | 上海软件开发-上海软件公司-软件外包-企业软件定制开发公司-咏熠科技 | 智能门锁电机_智能门锁离合器_智能门锁电机厂家-温州劲力智能科技有限公司 | 上海物流公司,上海货运公司,上海物流专线-优骐物流公司 | 防水套管厂家_刚性防水套管_柔性防水套管_不锈钢防水套管-郑州中泰管道 | 重庆磨床过滤机,重庆纸带过滤机,机床伸缩钣金,重庆机床钣金护罩-重庆达鸿兴精密机械制造有限公司 | 净化车间_洁净厂房_净化公司_净化厂房_无尘室工程_洁净工程装修|改造|施工-深圳净化公司 | 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | bng防爆挠性连接管-定做金属防爆挠性管-依客思防爆科技 | 集菌仪厂家_全封闭_封闭式_智能智能集菌仪厂家-上海郓曹 | 铝单板_铝窗花_铝单板厂家_氟碳包柱铝单板批发价格-佛山科阳金属 | 昆山新莱洁净应用材料股份有限公司-卫生级蝶阀,无菌取样阀,不锈钢隔膜阀,换向阀,离心泵 | 西安展台设计搭建_西安活动策划公司_西安会议会场布置_西安展厅设计西安旭阳展览展示 | 高光谱相机-近红外高光谱相机厂家-高光谱成像仪-SINESPEC 赛斯拜克 | 成都珞石机械 - 模温机、油温机、油加热器生产厂家 | 恒湿机_除湿加湿一体机_恒湿净化消毒一体机厂家-杭州英腾电器有限公司 | 新疆十佳旅行社_新疆旅游报价_新疆自驾跟团游-新疆中西部国际旅行社 | 船老大板材_浙江船老大全屋定制_船老大官网 | 盘古网络技术有限公司| 深圳展厅设计_企业展馆设计_展厅设计公司_数字展厅设计_深圳百艺堂 | 365文案网_全网创意文案句子素材站 | 无压烧结银_有压烧结银_导电银胶_导电油墨_导电胶-善仁(浙江)新材料 | 山东艾德实业有限公司| 深圳货架厂家_金丽声精品货架_广东金丽声展示设备有限公司官网 | 柴油机_柴油发电机_厂家_品牌-江苏卡得城仕发动机有限公司 |