// Метод слияния двух списков (например,  второй список может формироваться при завершении работы некоторой программы
        public static VirtualRAM Merge(VirtualRAM a, VirtualRAM b)
        {
            VirtualRAM ans = new VirtualRAM();

            for (int i = 0; i < a.MemoryList.Count; i++)
            {
                ans.TakeMemory(a.MemoryList[i].Ptr, a.MemoryList[i].Len);
            }
            for (int i = 0; i < b.MemoryList.Count; i++) // выкидывает Exception при возможных ошибках(пересечение)
            {
                if (!ans.TakeMemory(b.MemoryList[i].Ptr, b.MemoryList[i].Len))
                {
                    throw new Exception();
                }
            }
            return(ans);
        }
        // Метод формирование нового списка из блоков длины не менее L
        public VirtualRAM CreateNewVirtualRAM(int Lenght)
        {
            VirtualRAM ans = new VirtualRAM();

            for (int i = 0; i < MemoryList.Count; i++)
            {
                if (MemoryList[i].Len >= Lenght)
                {
                    ans.TakeMemory(MemoryList[i].Ptr, MemoryList[i].Len);
                }
            }
            return(ans);
        }