|
5 / 5 / 2
Регистрация: 04.10.2010
Сообщений: 205
|
|
[Обсуждение] Распределение памяти29.09.2012, 23:51. Показов 1442. Ответов 7
Метки нет (Все метки)
Приветствую!
Получил задание, и не знаю как к нему подойти, не пойму как реализовать суть вопроса: Написать на языке Си программу, демонстрирующую следующий способ распределения памяти: стратегия выделения памяти – первый подходящий, структура данных для управления распределения памяти – двусвязный список с этикетками, малых дыр не избегать. В теории понимаю каждое слово, написанное выше, но вот как подступить к вопросу, как оформить, какие процедуры использовать, не пойму..
0
|
|
| 29.09.2012, 23:51 | |
|
Ответы с готовыми решениями:
7
Распределение оперативной памяти. Распределение памяти для выделения и освобождения блоков памяти внутри запрошенного пула Динамическое распределение памяти |
| 01.10.2012, 10:31 | ||
|
Пётр Нефедов, я так понял тебе надо просто смоделировать алгоритм выделения памяти - простейший - первое подходящее. Никаких реальных выделений и работы с памятью тебе производить не надо. Объявляешь массив, допустим размером 256. Это типа 256 сегментов. Это типа "память" (допустим, memory[256]).
Теперь у тебя два варианта: битовая матрица или связанный список. В задании у тебя связанный список. Создаешь структуру, в котором есть переменная (допустим status), которая хранит либо h - hole (допустим 0) либо имя процесса, а h - собственно "пусто", вторая переменная - занимаемый объем размер в памяти (количество сегментов, допустим size). Также должен быть указатель на соответствующий "сегмент памяти" (указатель на элемент массива "памяти" mem_ptr). Ну и естественно, prev_ptr, next_ptr - ссылающиеся на узел "до" и узел "после". В начальном состоянии у тебя будет одно звено списка с адресом на нулевой элемент массива размером в 256 "единиц сегментов", со status = 0. Просишь пользователя ввести/удалить процесс, запрашиваешь имя процесса (для простоты букву A, B, C...) и количество сегментов, ему необходимых. Программа шарит по списку и ищет первый подходящий объем. Допустим ввели процесс A размером 10. первое звено будет иметь значения: stat = 'A' size = 10 mem_ptr = &memory[0] next_ptr = на второе звено списка создается второе звено: stat = 0 size = 256 - 10 mem_ptr = &memory[10] prev_ptr = предыдущее звено next_ptr = пока NULL записываешь в массив memory 10 раз 'A'. и понеслась... удаляешь процесс - удаляется звено, если есть ближайший узел со stat = 0, то их надо сложить, если нет - просто дыра. если места под процесс нет - пишешь пользователю: недостаточно памяти. Добавлено через 1 минуту Добавлено через 10 минут Не по теме: в кои-то веки на cyberforum увидел, как человеку нормальное задание дали, а то "сложите третий столбик в матрице", "удалите второе слово в тексте"...
0
|
||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
||
| 01.10.2012, 14:30 | ||
0
|
||
|
5 / 5 / 2
Регистрация: 04.10.2010
Сообщений: 205
|
|
| 01.10.2012, 18:35 [ТС] | |
|
g_u_e_s_t все проще, я один из тех, когда предлагая готовый код, получали отказ, а я получал поощрение в самообучении
![]() remarkes спс, идея интересна) можно думаю проще реализовать. Остается 1 вопрос для меня без ответа, (мб в книжках найду ответ): для каждого сегмента мне надо выводить начало адреса, с которого начал сегмент занимать память и конечный адрес. Так вот, думаю как проще реализовать!? Через указатели думаю.
0
|
|
| 01.10.2012, 20:01 | |||
|
Пётр Нефедов, то что я описал тоже два пальца об асфальт реализовывать.
. я ж тебе писал - в структуре:mem_ptr = &memory[10] mem_ptr - это и есть указатель. "конечный указатель" не нужен, его можно посчитать, используя mem_ptr + size * (sizeof*(memory[0])) <- размер твоего "элемента памяти". если у тебя int или char, то можешь тупо на этот char и умножить, но не тру, конечно. конечный указатель тебе нужен будет только для того, чтобы создать новый узел списка. Добавлено через 2 минуты
0
|
|||
|
5 / 5 / 2
Регистрация: 04.10.2010
Сообщений: 205
|
||
| 01.10.2012, 20:18 [ТС] | ||
|
remarkes Идею понял)
А про шутку: самая лучшая была вроде типа:
Не по теме: Вам смешно, а еще и не такое видел\слышал :D
0
|
||
| 01.10.2012, 20:50 | |||||||
|
Пётр Нефедов, я про конечный указатель немного неправильно написал. будет просто:
0
|
|||||||
| 02.10.2012, 02:36 | |
|
0
|
|
| 02.10.2012, 02:36 | |
|
Помогаю со студенческими работами здесь
8
Неверное распределение памяти Динамическое распределение памяти Динамическое распределение памяти
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа.
В качестве фильтра для отбора служит предопределенное значение перечислений.
Процедура. . .
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|