Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2014, 22:05   #1
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию Битовая карта.Наиболее подходящий.

Написать программу, моделирующую динамическое распределение памяти в операционной системе. В качестве модели оперативной памяти программа должна использовать байтовый массив размера не менее 1024 байт. Использование других глобальных переменных в программе запрещено (то есть вся информация о свободных/занятых участках должна храниться внутри массива). В программе в обязательном порядке должны присутствовать следующие функции:
а) Выделить участок заданного размера. В случае успеха вывести начальный адрес выделенного участка. Если участка подходящего для выделения не найдено, необходимо вывести диагностическое сообщение о нехватке памяти.
б) Освободить ранее выделенный участок. В качестве параметра функция должна принимать начальный адрес освобождаемого участка. Ранее выделенный участок может быть освобожден только целиком (освобождение части участка не допускается).
в) Получить информацию о свободных/занятых участках в «оперативной памяти» (количество участков каждого типа, начальные адреса, размеры, общее количество занятой и свободной памяти).
Алгоритм выделения памяти - Наиболее подходящий
Способ хранения информации - Битовая карта.

С картой более менее разобрался..
С алгоритмом выделения памяти проблема.

При добавлении памяти он пишет даже если размер 1 ввожу пишет - Блок необходимого размера не найден.Добавление невозможно.

Фрагмент кода программы.

Код:
void add(int razmer_bloka)
{
    int tmp=0;
    int n=0;
    while (n!=MAX_L-1)
    {
        if ((Memory[n]==1) ||  (Memory[n]<=1)) //Наиболее подходящий(правильно или нет??)
        { 
            n++; 
            tmp=0; 
            continue;
        }
        if (Memory[n]==0)
        {
            tmp++;
            n++;
        }
        if (tmp==razmer_bloka) 
        {
            cout<<"Блок найден"<<endl;
            zap(n-razmer_bloka,razmer_bloka,&size);
            return;
        }
    }
    if (n==MAX_L-1) cout<<"Блок необходимого размера не найден"<<endl<<"Добавление невозможно"<<endl;
}
Otar4ik вне форума Ответить с цитированием
Старый 09.11.2014, 22:20   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Очень красивая задача!
Я бы сюда ещё прикрутил графическое изображение памяти и дефрагментацию.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
битовая обработка данных osia18 Visual C++ 0 09.11.2011 21:28
Подходящий цвет KoBRaAndrey Общие вопросы Delphi 5 19.07.2011 17:43
Ищу подходящий сниффер Stilet Софт 3 05.11.2009 11:12
Ищу подходящий компонент Johnson Общие вопросы Delphi 1 28.08.2009 09:33
Битовая маска nimf Общие вопросы Delphi 1 16.10.2008 18:40