IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Динамическое распределение памяти, c++
сообщение
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Доброго времени суток, Уважаемые Форумчане! Вот столкнулся с заданием, которое необходимо реализовать, как можно быстрей... Значит, нужно написать программу, моделирующую динамическое распределение памяти в операционной системе. В качестве модели оперативной памяти программа должна использовать байтовый массив размера не менее 256 байт. Использование других глобальных переменных в программе запрещено. В программе в обязательном порядке должны присутствовать следующие функции:
а) Выделить участок заданного размера. В случае успеха вывести начальный адрес выделенного участка. Если участка подходящего для выделения не найдено, необходимо вывести диагностическое сообщение о нехватке памяти.
б) Освободить ранее выделенный участок. В качестве параметра функция должна принимать начальный адрес освобождаемого участка. Ранее выделенный участок может быть освобожден только целиком (освобождение части участка не допускается).
в) Получение информации о свободных/занятых участках в «оперативной памяти» (количество участков каждого типа, начальные адреса, размеры, общее количество занятой и свободной памяти).
А хранить всю информацию, я должен ввиде списков блоков; алгоритм выделения- двоичное разбиение.
Помогите, пожалуйста с реализацией! Возможно у кого-ибудь найдутся соответветсвующие наработки....
Что вообще из себя представляет двоичное разбиение?...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Так вот по алгоритму ты должен после того, как освободил память:

// Функция DelMem

while(i < 32)
{
if ((MyMem[i]==st2)&&(MyMem[i+1]==1))
{
MyMem[i+1]=0; // <--- Вот тут
cout<<"Blok is empty!"<<endl;
break;
}
i+=sb;
}
просмотреть соседний участок с только что освобожденным, если не ошибаюсь - справа от него, и если он тоже пуст - то объединить их, потом смотреть тот, что получился в результате объединения, и ЕГО соседа справа, и т.д. до тех пор, пока не встретишь непустой блок, или вся память не будет выделена одним куском, как при старте программы. А у тебя получается, что память как-бы свободна, общий размер свободных блоков достаточен для выделения памяти запрошеного размера, но память "фрагментирована", и ты не можешь выделить столько, сколько нужно (одного блока, способного полностью вместить запрошенный размер - нет)...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Но объединять мы можем только блоки равного размера... И вообще непонятным остаётся то, почему я не могу объдинить "дефрагментированную" память именно при таком разбиении... Можно более наглядно объяснить проблему и выход из неё ?) может какую-нибудь хитрую проверку сделать? rolleyes.gif
Да...и что со вторым багом? или они связаны...

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Rocket   Динамическое распределение памяти   11.10.2008 1:56
Rocket   Программистушки, ну подскажите пожалуйста с реализ…   13.10.2008 2:46
klem4   Ну вот узнаешь что-нибудь насчет двоичного разделе…   13.10.2008 10:39
volvo   Насколько я понимаю, под двоичным разбиением подра…   14.10.2008 2:02
Rocket   Насколько я понимаю, под двоичным разбиением подр…   14.10.2008 2:24
volvo   Binary buddy heap ?   14.10.2008 2:48
Rocket   Binary buddy heap ? Видать здесь о чём-то двоично…   14.10.2008 3:08
volvo   Перевод текста по ссылке: А теперь - от меня... …   14.10.2008 5:39
Rocket   Дааа...алгоритм жесть...вообще в растеренности как…   15.10.2008 4:03
volvo   Ну, ты же понимаешь, что если написать программу в…   15.10.2008 22:58
Rocket   В общем, ждем начала твоей реализации... Вот он…   17.10.2008 1:18
volvo   Ууу... Нет-нет-нет... Это без меня... На чистом С …   17.10.2008 1:41
Rocket   Ууу... Нет-нет-нет... Это без меня... На чистом С…   17.10.2008 2:07
volvo   Устраивает меня или нет - это к делу не относится.…   18.10.2008 4:38
Rocket   (фрагмент программы компилируется, выполняется, па…   18.10.2008 7:08
Rocket   Всё-таки пишу по-своему, то есть теми средствами я…   18.10.2008 14:56
Rocket   Вобщем написал я это двоичное разбиение, с успехом…   4.11.2008 23:05
Rocket   Неужели никому не известно такое страшное слово ка…   8.11.2008 17:18
Lapp   Неужели никому не известно такое страшное слово ка…   10.11.2008 8:52
Гость   Память подкачки, выделяеться заранее. Используетьс…   10.11.2008 8:07
Гость   Извиняюсь перед Уважаемым Админисраором за оффтоп.…   10.11.2008 8:36
Rocket   Значит данная программа реализует алгоритм двоично…   14.11.2008 0:00
volvo   А как добиться такого разбиения? Вот сразу после з…   14.11.2008 2:05
Rocket   А как добиться такого разбиения? Что надо делать…   14.11.2008 2:55
volvo   Так вот по алгоритму ты должен после того, как осв…   14.11.2008 4:30
Rocket   Но объединять мы можем только блоки равного размер…   14.11.2008 5:12
volvo   Ну смотри: вот процесс работы с твоей программой. …   14.11.2008 5:50
Rocket   Так а я в принципе и не пытаюсь начинать объединят…   14.11.2008 14:42
volvo   Хочешь, расскажу, в чем разница между выделением б…   14.11.2008 15:58


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 15:36
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name