/// <summary> /// Desfragmenta. /// </summary> /// <returns></returns> public MemArea DeFragment() { MemArea arena2; MemArea arena = this.FirstArea(); arena2 = arena.NextArea(); while (arena2 != null) { if (!arena.IsFree) { arena = arena2; } else if (arena2.IsFree) { arena = MemArea.CoalesceAdjacent(arena2); } else { MemArea.SwapAdjacent(arena2, arena); arena = arena2; } arena2 = arena.NextArea(); } this.FreeSpace = arena.Capacity; this.MaxFreeSpace = arena.Capacity; this.CalculateAreaMemoryUsage(); return(arena); }
/// <summary> /// Desaloca a <see cref="MemArea"/> informada. /// </summary> /// <param name="area"><see cref="MemArea"/> que serĂ¡ desalocada.</param> /// <returns></returns> public MemArea DeAllocate(MemArea area) { if (!area.IsFree) { uint capacity = area.Capacity; View view = area.View; view.MyFreeSpace += area.Capacity; area.IsFree = true; area = MemArea.CoalesceAdjacent(area); area.IsFree = true; this.FreeSpace = this.MyFreeSpace - ((uint)MemArea.Header.Size); this.Usage++; } return(area); }