Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
 /// <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);
 }