![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 | |
Новичок
Джуниор
Регистрация: 23.05.2020
Сообщений: 2
|
![]()
Здравствуйте. Не могу разобраться с заданием, потому что не понимаю над чем мне предстоит работать, какие функции я должен использовать для этого, как указывать размер блоков, сравнивать их, каким образом я должен разделить динамическую память на блоки (предположительно ф-ия getmem). Дайте хотя бы напутствие с чего начать. Спасибо.
Цитата:
|
|
![]() |
![]() |
![]() |
#2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,429
|
![]()
Вам нужно сымитировать работу простого менеджера памяти. "Настоящую" динамическую память делить на блоки не надо. Как мне это видится. Нужно создать два списка. Один для свободных блоков, второй для занятых. Решить, сколько именно памяти будет имитироваться, например, 1000 байт. Каждый блок памяти описывать двумя числами (смещение; размер). Смещение считается от нуля. Поместить в список свободных блоков блок памяти (0; 1000). Теперь нужно описать две функции. Одна функция будет выделять блок памяти. Она вызывается с параметром требуемого размера свободной памяти (например, 100 байт), возвращает -1, если нельзя выделить память, или смещение выделенного блока. Внутри функции нужно пройтись по списку свободных блоков и выбрать подходящий. Подходящий блок (0; 1000) изымается из списка, затем разбивается на два блока, если имел размер больше требуемого. Первый из этих блоков (0; 100) помещается в список занятых блоков, второй блок (100; 900) в список свободных. Затем функция возвращает смещение 0 найденного блока. Вторая функция вызывается с параметром смещения блока, который надо вернуть. Теперь нужно идти по списку занятых блоков и искать блок, в который попало указанное смещение. Если блок найден, то он изымается из списка занятых, и начинается операция его возврата в список свободных. Для этого проходится список свободных блоков и производится попытка склейки только что освобожденного блока с текущим рассматриваемым блоком в списке. Если их можно склеить, то текущий блок изымается, склеивается с только что освобожденным блоком, и теперь уже для него и дальнейших свободных блоков в списке производится попытка склейки. Когда список свободных блоков пройден до конца, то склеенный блок помещается в конец.
Если совсем уж не знаете с чего начать, то напишите основную программу с вызовом 2 функций. Одна функция пусть всегда возвращает -1, а вторая просто ничего не делает. Затем понадобятся знания об организации списков в динамической памяти, хотя на первое время можно обойтись массивами фиксированного размера для упрощения. Опять же нужно отталкиваться от тех тем, которые были рассмотрены по учебе.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#3 | |
Новичок
Джуниор
Регистрация: 23.05.2020
Сообщений: 2
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Моделирование динамического управления памятью | Yavorsky | Фриланс | 3 | 29.09.2018 22:53 |
Моделирование динамического управления памятью | Yavorsky | Фриланс | 5 | 10.09.2018 09:12 |
Задача по ОС. Сегментно-страничная схема управления памятью. | Rakuz | Помощь студентам | 0 | 17.06.2012 14:49 |
С#/Java. Подсистема управления памятью. | anechka58 | Помощь студентам | 0 | 08.06.2012 22:10 |