/// <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);
        }