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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2010, 20:30   #1
aurora_87
Пользователь
 
Регистрация: 25.12.2008
Сообщений: 16
По умолчанию управление свободной памятью ОС в С

Необходимо написать программу выделения и возврата свободной памяти по алгоритму "наиболее подходящему". Выделение памяти я примерно сделала, а вот возврат не могу понять как нужно делать.
Существуют свободные участки(дыры) ( наверное, нужно хранить размер участка и адрес), вводим размер задания и ищем дыру, размер которой меньше всех превосходит размер требуемого задания и помещаем туда это задание. Для облегчения поиска список дыр должен быть отсортирован по возрастанию размеров дыр. Еще как склеивать оставшиеся небольшие участки памяти?
Код:
#include <stdio.h>
#include <conio.h>
#define N 15
void main ()
{
clrscr ();
int mas[N];   //massiv iz dyr
Int k,c,x;
Int razmer;    // razmer pomechaemogo ychastka
Int i,j;             

printf ("\n vvedite koli4estvo dyr\n");
scanf ("%d",&k);

printf ("\n vvedite massiv dyr\n");
for (i=0;i<k;i++)
scanf ("%d",&mas[i]);

printf ("\n vvedite razmer uchastka pamyati\n");
scanf ("%d",& razmer);
//sortirovka razmerov dyr po vozrostaniu
for (i=1;i<k;i++)
for (j=0;j<k-1;j++)
if (mas[j]>mas[j+1])
{
x=mas[j];
mas[j]=mas[j+1];
mas[j+1]=x;
}
//vydelenie pamyati dla uchastka
for (i=0;i<k;i++)

if (mas[i]>= razmer)
{
mas[i]=mas[i]- razmer;
if (mas[i]==0)
{
for (i=i;i<k;i++)
mas[i]=mas[i+1];
k=k-1;
}
break;
}
printf ("\n konechnyi massiv dir:\n");
for (i=0;i<k;i++)
printf ("%d ",mas[i]);

getch();
aurora_87 вне форума Ответить с цитированием
Старый 03.06.2010, 21:55   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Цитата:
Необходимо написать программу выделения и возврата свободной памяти по алгоритму "наиболее подходящему"
Метод наилучшего подходящего называется.
Вся память изначально представлена в виде L1 или L2 списка с полем size( размер )

Код:
typedef struct Block {
  long size;
  struct block *next;
} Block;
Просматривается весь список свободных блоков, находится наименьший и вывязывается из списка

В общем это сложная тема, я сам не доконца в ней разобрался, если хотите могу дать исходник на Си

Если это не то что вам нужно, то я извиняюсь

Последний раз редактировалось NiCola999; 03.06.2010 в 22:01.
NiCola999 вне форума Ответить с цитированием
Старый 03.06.2010, 23:18   #3
aurora_87
Пользователь
 
Регистрация: 25.12.2008
Сообщений: 16
По умолчанию

Да, в списках лучше было бы сделать. Если можно, пришлите исходник, именно на си, а вообще возврат памяти как происходит?
aurora_87 вне форума Ответить с цитированием
Старый 03.06.2010, 23:30   #4
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

ищется место в списке куда вставлять освобождаемый блок и вставляется туда, затем сливаются все близлежащие с ним свободные блоки

вот вам исходник на си с небольшими комментариями
Вложения
Тип файла: rar best_method.rar (1.0 Кб, 14 просмотров)

Последний раз редактировалось NiCola999; 03.06.2010 в 23:40.
NiCola999 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
управление памятью galick Операционные системы общие вопросы 2 28.03.2014 17:05
управление памятью galick Помощь студентам 1 27.05.2010 13:14
Управление памятью Raz0r Помощь студентам 4 02.03.2009 18:42
Управление памятью ilham Операционные системы общие вопросы 2 17.12.2008 18:29
динамическое управление памятью oblom Общие вопросы C/C++ 12 16.02.2008 15:24