Си диез / Говнокод #18344 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
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;
                }
            }
        }

Примерная реализация алгоритма best-fit

Запостил: qstd qstd, (Updated )

Комментарии (0) RSS

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8