• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Менеджер сегментированной/строчной памяти

Регистрация
30 Дек 2010
Сообщения
2
Реакции
0
Баллы
0
Менеджер сегментированной/строчной памяти

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

менеджер сегментированной памяти:

short cMemoryManager::realloc()
{
short addr = MEMORY_SIZE - 8;
sBlockDescription *tmp = (sBlockDescription*)(&memory[addr]);
while(empBlockCnt() > 1)
{
while(tmp->nextAddr != -1)
{
addr = tmp->nextAddr;
tmp = (sBlockDescription*)(&memory[addr]);
moveEmptyBlockEx(addr);
}
glueEmpBlocks(0);
addr = MEMORY_SIZE - 8;
tmp = (sBlockDescription*)(&memory[addr]);
}
return 0;
}


менеджер строчной памяти:

void read(int id,int size,int offset,char* data)
{
sPage* tmp;
int start = offset / PSZ;
int start_offset = offset - start * PSZ;
int cur = 0;
int sp = start_offset;
int pp = start;
if(alc->data[id][pp] != -1)
tmp = getPageForReadOrWrite(alc->data[id][pp]);
else
return;
while(size--)
{
if(sp >= PSZ)
{
sp = 0;
pp ++;
if(alc->data[id][pp] != -1)
tmp = getPageForReadOrWrite(alc->data[id][pp]);
else
return;
}
if(pp >= PCNT)return;
//
data[cur] = tmp->data[sp];
cur++;
//
sp ++;
}
}
 
С сегментированной памятью вроде как справился. Помогите с аннотацией строк для строчной памяти.

void read(int id,int size,int offset,char* data)
{
sPage* tmp;
int start = offset / PSZ;
int start_offset = offset - start * PSZ;
int cur = 0;
int sp = start_offset;
int pp = start;
if(alc->data[id][pp] != -1)
tmp = getPageForReadOrWrite(alc->data[id][pp]);
else
return;
while(size--)
{
if(sp >= PSZ)
{
sp = 0;
pp ++;
if(alc->data[id][pp] != -1)
tmp = getPageForReadOrWrite(alc->data[id][pp]);
else
return;
}
if(pp >= PCNT)return;
//
data[cur] = tmp->data[sp];
cur++;
//
sp ++;
}
}
 
Назад
Сверху