Форум программистов, компьютерный форум CyberForum.ru

Менеджер памяти - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Работяга
0 / 0 / 0
Регистрация: 30.10.2012
Сообщений: 6
30.10.2012, 13:40     Менеджер памяти #1
Доброго времени суток. Столкнулся с такой проблемой...
Необходимо написать эмулятор менеджера памяти, т.е. создать какой нибудь динамический массив которой будет нашей оперативкой (32MB), и заполнять / освобождать его. + визуализация в виде 32768 клеточек подкрашенных разными цветами, в зависимости от статуса занятости единицы памяти.

Может кто-нибудь описать алгоритм?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Algiz
159 / 159 / 13
Регистрация: 23.02.2011
Сообщений: 347
30.10.2012, 13:56     Менеджер памяти #2
Ну можешь попробовать так:
У тебя есть массив. Далее создаешь функции аллокации и освобождения памяти. Первая принимает размер блока, возвращает указатель на позицию в массиве. Вторая принимает позицию и освобождает данный участок. Как ты уже понял, тебе еще нужно в какой-то отдельной структуре хранить информацию о том, какая область занята, а какая свободна. Например список пар(адрес начала, размер). Информацию для визуализации черпать из этой же структуры.
Работяга
0 / 0 / 0
Регистрация: 30.10.2012
Сообщений: 6
30.10.2012, 14:14  [ТС]     Менеджер памяти #3
Предположим, что:
- минимальная единица памяти 1kB
- вся оперативная память ровна 32MB (динамический массив из элементов класса Byte, содержащих в себе char) и нужно ли в них организовывать структуру однонаправленного/двунаправенного списка?
- сколько и каких классов будет необходимо создать помимо Byte (для чего они будут нужны)

И сама ситуация: допустим мы ходим загрузить в память файл размером 1.5MB, что должно будет произойти (какие проверки и действия произойдут)

Опять же, это не настоящий менеджер памяти, а только его эмулятор, т.е. он должен только элюстрировать то, что должно происходить в настоящем.

Добавлено через 2 минуты
Цитата Сообщение от Algiz Посмотреть сообщение
Ну можешь попробовать так:
У тебя есть массив. Далее создаешь функции аллокации и освобождения памяти. Первая принимает размер блока, возвращает указатель на позицию в массиве. Вторая принимает позицию и освобождает данный участок. Как ты уже понял, тебе еще нужно в какой-то отдельной структуре хранить информацию о том, какая область занята, а какая свободна. Например список пар(адрес начала, размер). Информацию для визуализации черпать из этой же структуры.
Большое спасибо)

Добавлено через 8 минут
Цитата Сообщение от Algiz Посмотреть сообщение
Ну можешь попробовать так:
У тебя есть массив. Далее создаешь функции аллокации и освобождения памяти. Первая принимает размер блока, возвращает указатель на позицию в массиве. Вторая принимает позицию и освобождает данный участок. Как ты уже понял, тебе еще нужно в какой-то отдельной структуре хранить информацию о том, какая область занята, а какая свободна. Например список пар(адрес начала, размер). Информацию для визуализации черпать из этой же структуры.
В этот класс нужно добавлять структуру двунаправленного списка? И тот самый динамический массив будет состоять из этих объектов класса Byte?
Если да и он будет иметь структуру двунаправленного списка, то изначально у этих объектов будут адреса прошлого и следущего Byte? или только при загрузке в нашу "оперативную память" файла они будут появляться?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Byte
{
public:
    Byte() 
    { 
    setByte(0); 
    }
    ~c_Byte() {  }
 
    void setByte(unsigned char byte) { _byte = byte; }
    unsigned char byte() { return _byte; }
 
private:
    unsigned char _byte;
 
};
Algiz
159 / 159 / 13
Регистрация: 23.02.2011
Сообщений: 347
30.10.2012, 15:24     Менеджер памяти #4
Цитата Сообщение от Работяга Посмотреть сообщение
class Byte
{
public:
* * Byte()
* * {
* * setByte(0);
* * }
* * ~c_Byte() { *}
void setByte(unsigned char byte) { _byte = byte; }
* * unsigned char byte() { return _byte; }
private:
* * unsigned char _byte;
};
Обычный динамический массив char* - твоя память, и отдельно список из пар (int,int), 1 - смещение
начала занятого блока 2 - его длинна, ну или смещение конца, как больше нравится. Никакие классы тут не нужны. Все проще.
Yandex
Объявления
30.10.2012, 15:24     Менеджер памяти
Ответ Создать тему
Опции темы

Текущее время: 20:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru