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

> Внимание!

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

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

> Менеджер оперативной памяти на СИ, Помогите немного исправить программу
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

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


Необходимо написать программу, демонстрирующую следующий способ распределения ОП:
1. Стратегия размещения - первый подходящий
2. Структура данных-блоки фиксированного размера.

Написал программу, но при таком способе накладывания маски, как мне сказали, требуется 128-разрядная или даже более разрядная система. Подскажите плиз каким образом можно накладывать маску, чтобы такого не было. Программа сейчас работает неправильно, так как всегда пишет что все блоки свободны. Если вдруг знаете в чем тут дело, то тоже напишите плиз.

Программу компилировал в компиляторе GCC для Windows.

#include <stdio.h>
#include <stdlib.h>
int i1,nachalo,bit1,konec;
unsigned int bitkarta[128];
void proverka()
{
int i,numblock,x,j=0;
unsigned int bit;
for (i=0; i<128; i++)
for (bit=1;bit<=32768;bit=bit<<1)
{
x=bitkarta[i]&bit;
numblock++;
if (x!=0)
{
printf("Block nomer %d zanyat!\n",numblock);
j++;
}
}
if (j==0) printf("Vse blocki svobodni!");
if (j==2048) printf("Vse blocki zanyati!");
}
void poisk(int size)
{
int i,i1=0,numblock=0,x;
unsigned int bit;
int kolblock=(size/2048)+1;
for (i=0;i<128;i++)
for(i=i1;i<128;i++)
for (bit=1;bit<=32768;bit=bit<<1)
{
numblock++;
x=bitkarta[i]&bit;
if (x==0)
{
nachalo=numblock;
i1=i;
bit1=bit;
break;
}

if (x==0) break;
}
bit1=bit1<<1;
for (i=i1;i<128;i++)
for(bit=bit1;bit<=32768;bit=bit<<1)
{
numblock++;
x=bitkarta[i]&bit;
if (x!=0)
{
konec=numblock;
i1=i;
bit1=bit;
break;
}
if (x!=0) break;
}
}
int pamyat(int size)
{
int bit=1,i,spec;
int kolblock=(size/2048)+1;
printf ("Kolichestvo blokov=%d\n",kolblock);
spec=nachalo;
i=nachalo/16;
bit=bit<<(nachalo-(16*i)-1);
while (kolblock!=0)
{
bitkarta[i]=bitkarta[i]+bit;
bit=bit<<1;
if (bit>32768)
{
bit=1;
i++;
}
kolblock--;
}
return spec;
}
void free(int spec,int size)
{
int i,kolblock;
unsigned int bit;
int numblock=(size/2048)+1;
i=spec/8;
bit=bit<<(spec-16*i-1);
while (kolblock!=0)
{
bitkarta[i]=bitkarta[i]-bit;
bit=bit<<1;
if(bit>32768)
{
bit=1;
i++;
}
kolblock--;
}
}
main()
{
int i,mem1=25000,mem2=37000,mem3=50000,mem4=10000,p1,p2,p3,p4;
int *memory=(int*)malloc(2097152);
for (i=0; i<256; i++) bitkarta [i]=0;
proverka();
poisk(mem1);
p1=pamyat(mem1);
proverka();
getchar();
poisk(mem2);
p1=pamyat(mem2);
proverka();
getchar();
poisk(mem3);
p1=pamyat(mem3);
proverka();
getchar();
poisk(mem4);
p1=pamyat(mem4);
proverka();
getchar();
free(p1,mem1);
free(p3,mem3);
free(p2,mem2);
free(p4,mem4);
}

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Во-первых, почему здесь? Это ж не Паскаль все-таки... А во-вторых:

Динамическое распределение памяти
(тут если не именно то, что тебе нужно, то очень похожее)
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 





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