예제 #1
0
        void InsertOrMerge(MemoryRegion prev, MemoryRegion r, MemoryRegion next)
        {
            Contract.Ensures(Brk == Contract.OldValue(Brk));

            if (MemoryRegion.CanMerge(prev, r))
            {
                prev.Expand(r);
                return;
            }

            InsertNode(prev, r);
            TryMergeWithNext(r);
        }
예제 #2
0
        bool TryMergeWithNext(MemoryRegion r)
        {
            Contract.Ensures(Brk == Contract.OldValue(Brk));

            var next = r.Next;

            if (next != null && MemoryRegion.CanMerge(r, next))
            {
                RemoveNode(r, next);
                r.Expand(next);
                return(true);
            }
            else
            {
                return(false);
            }
        }