/// <summary> /// 释放内存 /// </summary> /// <param name="mem_id">内存块号</param> public override void ReleaseMemory(long mem_id) { for (int i = 0; i < OccupyTable.Count; i++) { AddressBlock temp = OccupyTable.Keys[i]; if (mem_id == temp.Start) { FreeTable.Add(mem_id, OccupyTable.Values[i].LongLength); OccupyTable.Remove(new AddressBlock { Start = mem_id, End = mem_id }); break; } } }
/// <summary> /// 内存段引用方法(将需要操作的内存块段整体读取-用于上层缓存使用) /// </summary> /// <param name="mem_id">读取的内存块号</param> /// <param name="realize_id">实际的内存段起始号</param> /// <returns>返回内存段</returns> public override MemoryBlock ReadMemory(long mem_id, out long realize_id) { MemoryBlock block = null; realize_id = -1; for (int i = 0; i < OccupyTable.Count; i++) { AddressBlock temp = OccupyTable.Keys[i]; if (mem_id >= temp.Start && mem_id < temp.End) { block = OccupyTable.Values[i]; realize_id = temp.Start; break; } } return(block); }