时间:2025年6月13日

引擎项目:BlueNew引擎

学习内容:传奇登录网关开发 第二课 

开发语音:DELPHI XE10.4.2-12.3

固定大小内存池

  //用于记录每一次分配内存详情的结构,包括所分配内存节点的最高最低位置,最大最小索引值,
  //实际分配内存的最高最低位置
  //每分配一次内存,就增加一个这样的记录,把分配内存的详细情况记录下来
  PMemPos = ^_tagMemPos;
  _tagMemPos = record
    HPos: Integer;      //节点的最高位置
    LPos: Integer;      //节点的最低位置
    MaxIndex: Integer;  //节点的最大索引
    MinIndex: Integer;  //节点的最小索引
    HMPos: Integer;     //实际分配内存的最高位置
    LMPos: Integer;     //实际分配内存的最低位置
  end;
  TMemPos = _tagMemPos;

  PXMemItem = ^_tagMemItem;

  //内存池的管理节点,用于管理内存池链表的内存节点结构
  PXMemNode = ^_tagMemNode;
  _tagMemNode = record
    InUse: Bool;//是否在使用中
    PriorNode: PXMemNode;//前节点
    NextNode: PXMemNode;//后节点
    MemItem: PXMemItem;//内存项,实际分配的内存在这个结构中
    Index: Integer;//节点索引
  end;
  TXMemNode = _tagMemNode;


  //内存项结构,实际分配的内存在这里标定
  _tagMemItem = record
    MemNode: PXMemNode;//本项相关联的内存节点
    MemBuffer: pAnsiChar;//实际分配的内存,这是指针,可以很容易改成内存地址
  end;
  TXMemItem = _tagMemItem;

  //这是类方法,它作为事件体现出来,让用户去实现,以释放用户所分配的特殊的内存
  TFreeMemEvent = procedure (Sender: TObject; const MemBuffer: pAnsiChar) of Object;
  EFixedMemoryPool = class(Exception);//内存池的异常类,继承自Exception

posted on 2025-06-13 13:16  十七传奇  阅读(14)  评论(0)    收藏  举报