1. C# / Говнокод #18344

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 15 Июня 2015

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

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

    Ошибка компиляции комментария:
    1. Гости могут высказаться только во вторник, пятницу или субботу
    ava Где здесь C++, guest?!
    А не использовать ли нам bbcode?
    • [b]жирный[/b] — жирный
    • [i]курсив[/i] — курсив
    • [u]подчеркнутый[/u] — подчеркнутый
    • [s]перечеркнутый[/s] — перечеркнутый
    • [blink]мигающий[/blink] — мигающий
    • [color=red]цвет[/color] — цвет (подробнее)
    • [size=20]размер[/size] — размер (подробнее)
    • [code=<language>]some code[/code] (подробнее)
    Проверочный код