Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> менеджер сегментированной памяти 
:(
    Опции темы
AlexandrFTK
Дата 21.1.2011, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 21.1.2011

Репутация: нет
Всего: нет



Всем привет! Помогите мне пожалуйста с аннотацией кода, который задал преподаватель. Это лишь часть целого кода, небольшой кусочек.

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


Код
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;
}




Вот я сам и с небольшой помощью знакомого попытался сделать аннотацию:

Код
short cMemoryManager::realloc() // Метод realloc() пытается уплотнить размещенные блоки памяти для освобождения большого
//непрерывного куска памяти. Код возврата: 0 если операция успешна, не 0 - если уплотнение не удалось."
//(на самом деле, он всегда возвращает 0, но это баг)).
{
short addr = MEMORY_SIZE - 8; // берём адрес первого блока (последний адрес памяти)
sBlockDescription *tmp = (sBlockDescription*)(&memory[addr]); // Берется адрес дескриптора последнего блока памяти.
//Каждый блок состоит из дескриптора блока (где содержится, например, его размер) и собственно блока данных для приложения.
while(empBlockCnt() > 1) // Цикл while не является оператором if, итерация пустых блоков, пока не останется только один.
{
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; // возвращаем 0
}


У преподавателя на 2й строке (short addr = MEMORY_SIZE - 8) уже заваливаюсь, говорит что комментарий не верен, говорит мне "поясни подробнее", а я не имею понятия как =(
Если не трудно, помогите мне пожалуйста с аннотацией поподробнее. И если можно, посоветуйте книгу (автора) по программированию, чтобы там было что-нибудь наподобие.

Модератор: не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) bsa - 21.1.2011, 22:30
PM MAIL   Вверх
bsa
Дата 21.1.2011, 22:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



вместо слова "адрес" в этой строке нужно использовать "индекс". Адреса получаются с помощью оператора & перед именем переменной. Это делается в строке 6.

Почитай про указатели и ссылки тут.
PM   Вверх
AlexandrFTK
Дата 26.1.2011, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 21.1.2011

Репутация: нет
Всего: нет



short addr = MEMORY_SIZE - 8;
Значит, получается: берётся тип индекса первого блока с размером памяти 8 бит? 
Скорее всего сморозил глупость smile 
А в других строках всё нормально? Ответьте пожалуйста.
PM MAIL   Вверх
bsa
Дата 26.1.2011, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(AlexandrFTK @  26.1.2011,  01:23 Найти цитируемый пост)
short addr = MEMORY_SIZE - 8;
Значит, получается: берётся тип индекса первого блока с размером памяти 8 бит? 

Берем индекс элемента массива под номером MEMORY_SIZE - 8;

Честно говоря, мне вообще смысл и алгоритм функции не понятны. В частности, магическое число 8.
PM   Вверх
AlexandrFTK
Дата 26.1.2011, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 21.1.2011

Репутация: нет
Всего: нет



Если вам интересно, выкладываю полную работу:

Это сообщение отредактировал(а) AlexandrFTK - 26.1.2011, 15:44

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  menedjer_segmentnoi_pamiati.doc 104,00 Kb
PM MAIL   Вверх
bsa
Дата 26.1.2011, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



совершенно неинтересно
PM   Вверх
AlexandrFTK
Дата 27.1.2011, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 21.1.2011

Репутация: нет
Всего: нет



В общем сегодня этот код, я, так сказать, кое-как сдал. Дали ещё одну часть кода из 2й работы. Помогите с аннотацией пожалуйста, очень нужна ваша помощь!!!  

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

Код
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--) //декрементация размера цикла while
{
if(sp >= PSZ)
{
sp = 0;
pp ++; //значение р увеличивается на 2
if(alc->data[id][pp] != -1)
tmp = getPageForReadOrWrite(alc->data[id][pp]); // получаем адрес страницы
else // условный оператор
return; // возвращаем
}
if(pp >= PCNT)return;
//
data[cur] = tmp->data[sp]; 
cur++; //значение cur увеличивается на 2
//
sp ++; //значение sр увеличивается на 2
}
}


Модератор: за игнорирование замечания об использовании кнопочки "Код" добавляю предупреждение.

Это сообщение отредактировал(а) bsa - 27.1.2011, 13:12
PM MAIL   Вверх
mes
Дата 27.1.2011, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(AlexandrFTK @  21.1.2011,  19:10 Найти цитируемый пост)

Модератор: не забываем пользоваться кнопочкой "Код"



Это сообщение отредактировал(а) mes - 27.1.2011, 13:03


--------------------
PM MAIL WWW   Вверх
Игорь1024
Дата 27.1.2011, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 11.5.2009
Где: Дальний Восток

Репутация: нет
Всего: нет



Новый способ получить готовую работу нахаляву?
Тем более что коменты какие-то... эээ... странные в общем.
--------------------
The God is real,unless he is declared as integer.
PM MAIL   Вверх
mes
Дата 27.1.2011, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



да и разметку не мешало бы сделать приличную



--------------------
PM MAIL WWW   Вверх
Игорь1024
Дата 27.1.2011, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 11.5.2009
Где: Дальний Восток

Репутация: нет
Всего: нет



И неправильные в корне. (Большинство из них).
--------------------
The God is real,unless he is declared as integer.
PM MAIL   Вверх
bsa
Дата 27.1.2011, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



PM   Вверх
AlexandrFTK
  Дата 30.3.2011, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 21.1.2011

Репутация: нет
Всего: нет



Народ, прошу помощи по этой же лабе. Что такое в строке int id (не id страницы!),что такое handle и как связаны эти 2 строки:

Добавлено через 1 минуту и 29 секунд
Помогите пожалуйста!!!

Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  2222.JPG 40,81 Kb
PM MAIL   Вверх
bsa
Дата 31.3.2011, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



AlexandrFTK, не зная, что такое alc, однозначно сказать нельзя, что такое id.
название handle используется для обозначения объектов, через которые осуществляется доступ к другим объектам. В принципе, дескриптор файла (FILE *f = fopen() или int fd = open()) тоже можно назвать handle.
Две строчки, связаны только тем, что вторая использует переменные, определенные в первой.
PM   Вверх
AlexandrFTK
Дата 2.4.2011, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 21.1.2011

Репутация: нет
Всего: нет



Короче, препод вчера сказал, но я точно уже не помню: выделяется память внутри массива, кот. выделяет 1 блок памяти и при выделении заполняется нулями... (как то так)  smile 
Препод сказал, всё что вы написали (выше постом), всё не правильно, но всё равно спасибо за ответ!  smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0571 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.