Александр ФТК
Ученик
- Регистрация
- 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 ++;
}
}
Всем привет! Помогите пожалуйста люди добрые и умные! Нужна помощь в подробном переводе кода, заданный преподавателем.
менеджер сегментированной памяти:
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 ++;
}
}