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

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

計算機等級考試內存池的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 主站蜘蛛池模板: 茶叶百科网-茶叶知识与茶文化探讨分享平台 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | 粘度计维修,在线粘度计,二手博勒飞粘度计维修|收购-天津市祥睿科技有限公司 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 工业设计,人工智能,体验式3D展示的智能技术交流服务平台-纳金网 J.S.Bach 圣巴赫_高端背景音乐系统_官网 | 济宁工业提升门|济宁电动防火门|济宁快速堆积门-济宁市统一电动门有限公司 | 据信,上课带着跳 D 体验-别样的课堂刺激感受引发网友热议 | 福建珂朗雅装饰材料有限公司「官方网站」 | 低粘度纤维素|混凝土灌浆料|有机硅憎水粉|聚羧酸减水剂-南京斯泰宝 | T恤衫定做,企业文化衫制作订做,广告T恤POLO衫定制厂家[源头工厂]-【汉诚T恤定制网】 | 环氧树脂地坪_防静电地坪漆_环氧地坪漆涂料厂家-地壹涂料地坪漆 环球电气之家-中国专业电气电子产品行业服务网站! | 仓储笼_仓储货架_南京货架_仓储货架厂家_南京货架价格低-南京一品仓储设备制造公司 | 耐压仪-高压耐压仪|徐吉电气 | 浙江自考_浙江自学考试网| 动环监控_机房环境监控_DCIM_机房漏水检测-斯特纽 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 自动检重秤-动态称重机-重量分选秤-苏州金钻称重设备系统开发有限公司 | 丽陂特官网_手机信号屏蔽器_Wifi信号干扰器厂家_学校考场工厂会议室屏蔽仪 | 壹作文_中小学生优秀满分作文大全| 上海办公室装修公司_办公室设计_直营办公装修-羚志悦装 | 丝印油墨_水性油墨_环保油墨油漆厂家_37国际化工 | 齿辊分级破碎机,高低压压球机,立式双动力磨粉机-郑州长城冶金设备有限公司 | 恒温槽_恒温水槽_恒温水浴槽-上海方瑞仪器有限公司 | 冷凝锅炉_燃气锅炉_工业燃气锅炉改造厂家-北京科诺锅炉 | MVE振动电机_MVE震动电机_MVE卧式振打电机-河南新乡德诚生产厂家 | 乐考网-银行从业_基金从业资格考试_初级/中级会计报名时间_中级经济师 | 讲师宝经纪-专业培训机构师资供应商_培训机构找讲师、培训师、讲师经纪就上讲师宝经纪 | 耐磨陶瓷管道_除渣器厂家-淄博浩瀚陶瓷科技有限公司 | 金属软管_不锈钢金属软管_巩义市润达管道设备制造有限公司 | 学习安徽网 | 考试试题_试卷及答案_诗词单词成语 - 优易学 | 生物风-销售载体,基因,质粒,ATCC细胞,ATCC菌株等,欢迎购买-百风生物 | 健身器材-健身器材厂家专卖-上海七诚健身器材有限公司 | 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 家用净水器代理批发加盟_净水机招商代理_全屋净水器定制品牌_【劳伦斯官网】 | 顶空进样器-吹扫捕集仪-热脱附仪-二次热解吸仪-北京华盛谱信仪器 | 高柔性拖链电缆_卷筒电缆_耐磨耐折聚氨酯电缆-玖泰特种电缆 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 |