Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
5 / 5 / 2
Регистрация: 04.10.2010
Сообщений: 205

[Обсуждение] Распределение памяти

29.09.2012, 23:51. Показов 1442. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую!
Получил задание, и не знаю как к нему подойти, не пойму как реализовать суть вопроса:
Написать на языке Си программу, демонстрирующую следующий способ распределения памяти: стратегия выделения памяти – первый подходящий, структура данных для управления распределения памяти – двусвязный список с этикетками, малых дыр не избегать.

В теории понимаю каждое слово, написанное выше, но вот как подступить к вопросу, как оформить, какие процедуры использовать, не пойму..
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.09.2012, 23:51
Ответы с готовыми решениями:

Распределение оперативной памяти.
На языке си нужно написать программу демонстрирующая распределение памяти. Программа должна в начале работы запросить блок памяти у...

Распределение памяти для выделения и освобождения блоков памяти внутри запрошенного пула
В программе малые"дыры" избегают,что нужно сделать что бы малые "дыры" не избегались.... # include <stdio.h> # include...

Динамическое распределение памяти
#include <stdio.h> #define NUM 5 #define PREDM 1 typedef struct { char fam,name ; int ball; int sred; ...

7
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
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
Цитата Сообщение от remarkes Посмотреть сообщение
Не по теме:
в кои-то веки на cyberforum увидел, как человеку нормальное задание дали, а то "сложите третий столбик в матрице", "удалите второе слово в тексте"...
Только на моей памяти он 3й с точно таким же заданием и вопросом в стиле "ааааа пАмАгИтЕ!!!"
0
5 / 5 / 2
Регистрация: 04.10.2010
Сообщений: 205
01.10.2012, 18:35  [ТС]
g_u_e_s_t все проще, я один из тех, когда предлагая готовый код, получали отказ, а я получал поощрение в самообучении
remarkes спс, идея интересна) можно думаю проще реализовать.
Остается 1 вопрос для меня без ответа, (мб в книжках найду ответ): для каждого сегмента мне надо выводить начало адреса, с которого начал сегмент занимать память и конечный адрес. Так вот, думаю как проще реализовать!? Через указатели думаю.
0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
01.10.2012, 20:01
Пётр Нефедов, то что я описал тоже два пальца об асфальт реализовывать.

Цитата Сообщение от Пётр Нефедов Посмотреть сообщение
для каждого сегмента мне надо выводить начало адреса, с которого начал сегмент занимать память и конечный адрес. Так вот, думаю как проще реализовать!? Через указатели думаю.
правильно - через указатели . я ж тебе писал - в структуре:
mem_ptr = &memory[10]
mem_ptr - это и есть указатель.
"конечный указатель" не нужен, его можно посчитать, используя mem_ptr + size * (sizeof*(memory[0])) <- размер твоего "элемента памяти". если у тебя int или char, то можешь тупо на этот char и умножить, но не тру, конечно. конечный указатель тебе нужен будет только для того, чтобы создать новый узел списка.

Добавлено через 2 минуты
Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
"ааааа пАмАгИтЕ!!!"
"два чиса да зочота!!1 препод в спину дышыт"
0
5 / 5 / 2
Регистрация: 04.10.2010
Сообщений: 205
01.10.2012, 20:18  [ТС]
remarkes Идею понял)
А про шутку: самая лучшая была вроде типа:
препод заставил изучить ...

Не по теме:

Вам смешно, а еще и не такое видел\слышал :D

0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
01.10.2012, 20:50
Пётр Нефедов, я про конечный указатель немного неправильно написал. будет просто:
C
1
konec_ptr = mem_ptr + size;
Добавлено через 2 минуты
Цитата Сообщение от Пётр Нефедов Посмотреть сообщение
Вам смешно, а еще и не такое видел\слышал
у меня ученица на зачете как-то сказала, что man - это выполнить от лица мужчины.
0
02.10.2012, 02:36

Не по теме:

Цитата Сообщение от remarkes Посмотреть сообщение
у меня ученица на зачете как-то сказала, что man - это выполнить от лица мужчины.
а в Emacs'е есть woman

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.10.2012, 02:36
Помогаю со студенческими работами здесь

Динамическое распределение памяти
Здравствуйте, помогите в решении задачи. Дана действительная квадратная матрица порядка n. Найти и вывести наибольшее из значений...

Неверное распределение памяти
доброе время суток помогите найти ошыбку компилирую нету никаких ошыбок дальше ввожу даные(1 пункт) ввел потом выбераю другой...

Динамическое распределение памяти
Дан массив действительных случайных чисел а размером n=100. Выве-сти на экран те элементы массива, индексы которых являются степеня-ми...

Динамическое распределение памяти
Надо добавить в двумерный массив строку с указанным номером , но не работает , как то неправильно добавляю память realloc-ом #include...

Динамическое распределение памяти в языке С
Помогите, пожалуйста решить задачу на С. В программе определите и инициализируйте переменную X типа double, указатель double * и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
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
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru