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

必勝高考網(wǎng) > 計算機(jī)類 > 計算機(jī)等級 > 資訊 >

計算機(jī)等級考試內(nèi)存池的C++實現(xiàn)代碼

時間: 未知2 資訊

  MemoryBlock.h

  #pragma once

  #define USHORT unsigned short

  #define ULONG unsigned long

  #include

  using namespace std;

  //內(nèi)存塊

  struct MemoryBlock

  {

  USHORT m_nSize;//可分配內(nèi)存總大小

  USHORT m_nFree;//可分配內(nèi)存單元數(shù)目

  USHORT m_nFirst;//第一個可用的內(nèi)存單元位置

  MemoryBlock* m_pNext;//指向下一個內(nèi)存塊

  char m_data[1];

  void* operator new(size_t,const USHORT& sum,const USHORT& unit_size)

  {

  return ::operator new(sizeof(MemoryBlock)+sum*unit_size);//申請一個內(nèi)存塊空間

  }

  void operator delete(void* del,size_t)

  {

  ::operator delete(del);//刪除內(nèi)存塊空間

  }

  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(){}

  };

  內(nèi)存池MemoryPool聲明文件

  MemoryPool.h

  #pragma once

  #include "MemoryBlock.h"

  //內(nèi)存池 a very good memory manager

  class MemoryPool

  {

  private:

  USHORT m_nUnitSize;//一個可分配單元的大小

  USHORT m_nInitSize;//第一個可分配空間數(shù)目

  USHORT m_nGrowSize;//新增的可分配空間數(shù)目

  MemoryBlock* m_pFirst;//指向第一個內(nèi)存塊

  public:

  //單元大小,第一個內(nèi)存塊的可分配空間數(shù)目,第二個內(nèi)存塊之后的可分配空間數(shù)目

  MemoryPool(const USHORT& unit_size,const USHORT& init_size=2048,const USHORT& grow_size=1024);

  ~MemoryPool(void);

  void* Alloc();//分配內(nèi)存

  void Free(void* pfree);//回收內(nèi)存

  void FreeMemoryBlock(MemoryBlock *pblock);//銷毀

  };

  內(nèi)存池MemoryPool實現(xiàn)文件

  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的倍數(shù).

  //令人糾結(jié)的注釋

  }

  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沒走到最后并且當(dāng)前block沒有可分配結(jié)點(diǎn)

  {

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

  }

  if(pmb_block)//如果找到可分配結(jié)點(diǎn)的block

  {

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

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

  pmb_block->m_nFree--;//可分配節(jié)點(diǎn)自減

  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不在當(dāng)前block中

  {

  pmb_preblock=pmb_block;//前一個block塊

52765 主站蜘蛛池模板: SOUNDWELL 编码器|电位器|旋转编码器|可调电位器|编码开关厂家-广东升威电子制品有限公司 | 小型高低温循环试验箱-可程式高低温湿热交变试验箱-东莞市拓德环境测试设备有限公司 | 诗词大全-古诗名句 - 古诗词赏析 | 电主轴-高速精密电主轴-高速电机厂家-瑞德沃斯品牌有限公司 | 嘉兴恒升声级计-湖南衡仪声级计-杭州爱华多功能声级计-上海邦沃仪器设备有限公司 | 上海道勤塑化有限公司| 安驭邦官网-双向万能直角铣头,加工中心侧铣头,角度头[厂家直销] 闸阀_截止阀_止回阀「生产厂家」-上海卡比阀门有限公司 | 单螺旋速冻机-双螺旋-流态化-隧道式-食品速冻机厂家-广州冰泉制冷 | 黑龙江「京科脑康」医院-哈尔滨失眠医院_哈尔滨治疗抑郁症医院_哈尔滨精神心理医院 | 贵州科比特-防雷公司厂家提供贵州防雷工程,防雷检测,防雷接地,防雷设备价格,防雷产品报价服务-贵州防雷检测公司 | 保镖公司-私人保镖-深圳保镖公司【环宇兄弟保镖】 | 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 仓储笼_金属箱租赁_循环包装_铁网箱_蝴蝶笼租赁_酷龙仓储笼租赁 测试治具|过炉治具|过锡炉治具|工装夹具|测试夹具|允睿自动化设备 | 济南展厅设计施工_数字化展厅策划设计施工公司_山东锐尚文化传播有限公司 | 校服厂家,英伦校服定做工厂,园服生产定制厂商-东莞市艾咪天使校服 | 工作服定制,工作服定做,工作服厂家-卡珀职业服装(苏州)有限公司 | 【官网】博莱特空压机,永磁变频空压机,螺杆空压机-欧能优 | 安徽净化板_合肥岩棉板厂家_玻镁板厂家_安徽科艺美洁净科技有限公司 | 底部填充胶_电子封装胶_芯片封装胶_芯片底部填充胶厂家-东莞汉思新材料 | 福建珂朗雅装饰材料有限公司「官方网站」 | 成都热收缩包装机_袖口式膜包机_高速塑封机价格_全自动封切机器_大型套膜机厂家 | 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 加气混凝土砌块设备,轻质砖设备,蒸养砖设备,新型墙体设备-河南省杜甫机械制造有限公司 | 氧氮氢联合测定仪-联测仪-氧氮氢元素分析仪-江苏品彦光电 | 土壤墒情监测站_土壤墒情监测仪_土壤墒情监测系统_管式土壤墒情站-山东风途物联网 | 恒温恒湿试验箱_高低温试验箱_恒温恒湿箱-东莞市高天试验设备有限公司 | 深圳网站建设-高端企业网站开发-定制网页设计制作公司 | 水冷散热器_水冷电子散热器_大功率散热器_水冷板散热器厂家-河源市恒光辉散热器有限公司 | 丹佛斯变频器-Danfoss战略代理经销商-上海津信变频器有限公司 | 广州展台特装搭建商|特装展位设计搭建|展会特装搭建|特装展台制作设计|展览特装公司 | 单螺旋速冻机-双螺旋-流态化-隧道式-食品速冻机厂家-广州冰泉制冷 | 粉碎机_塑料粉碎机_塑料破碎机厂家-星标机械 | 广东西屋电气有限公司-广东西屋电气有限公司 | 清水-铝合金-建筑模板厂家-木模板价格-铝模板生产「五棵松」品牌 | 广西教师资格网-广西教师资格证考试网 | 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 医用空气消毒机-医用管路消毒机-工作服消毒柜-成都三康王 | 结晶点测定仪-润滑脂滴点测定仪-大连煜烁 | 12cr1mov无缝钢管切割-15crmog无缝钢管切割-40cr无缝钢管切割-42crmo无缝钢管切割-Q345B无缝钢管切割-45#无缝钢管切割 - 聊城宽达钢管有限公司 | 集装箱箱号识别_自重载重图像识别_铁路车号自动识别_OCR图像识别 | 软文发布-新闻发布推广平台-代写文章-网络广告营销-自助发稿公司媒介星 |