时间: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
浙公网安备 33010602011771号