Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
public void AllocateMemory(ref int[] segmentSizeProcess)
{
int[] difference;
int j = 0;
int tempo = 0;
for (int i = 0; i < segmentSizeProcess.Count(); i++)
{
difference = new int[memory.Count]; // храним разность размера блока памяти и требуемого размера для процесса
for (int count = 0; count < memory.Count; count++)
{
difference[count] = -2; // предварительно инициализируем
}
for (int count_memory=0; count_memory<memory.Count();
count_memory++)
{
if (memory[count_memory].size - segmentSizeProcess[i] >= 0) // если равно 0, значит
// сегмент полностью распределён
{
if (!memory[count_memory].isAllocate)
{ difference[count_memory] = memory[count_memory].size - segmentSizeProcess[i]; }
else
{ difference[count_memory] = -1; } // если сегмент занят -
// то он недоступен
}
}
tempo = GetMinDifference(ref difference); // получаем индекс минимальной разности
// если результат "-", значит секторы заняты, выходим из цикла
if (difference[tempo] >= 0)
{
memory.ElementAt(tempo).isAllocate = true; // процесс занял сегмент
if (difference[tempo] > 0) // если остаётся фрагмент памяти
{
CreateDifferenceSegment(difference[tempo]); // создаем новый сегмент, равный
// наименьшей разности памяти сегмента и памяти для процесса
}
memory[tempo].size = segmentSizeProcess[i]; // распределяем память
}
else
{
break;
}
}
}
Комментарии (0) RSS