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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Работяга
0 / 0 / 0
Регистрация: 30.10.2012
Сообщений: 6
#1

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

30.10.2012, 13:40. Просмотров 1690. Ответов 3
Метки нет (Все метки)

Доброго времени суток. Столкнулся с такой проблемой...
Необходимо написать эмулятор менеджера памяти, т.е. создать какой нибудь динамический массив которой будет нашей оперативкой (32MB), и заполнять / освобождать его. + визуализация в виде 32768 клеточек подкрашенных разными цветами, в зависимости от статуса занятости единицы памяти.

Может кто-нибудь описать алгоритм?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2012, 13:40     Менеджер памяти
Посмотрите здесь:

Менеджер памяти - C++
Хочу написать свои аналоги malloc free. Загвоздка в том, что я не знаю как освобождать потом память, ведь VirtualFree не может освободить...

Менеджер памяти - C++
Пишу менеджер памяти и возник вопрос насчет реализации free. Как бы из функции убить переданный указатель ? то есть занулить его......

Менеджер сегментированной памяти - C++
Добрый вечер. Очень нужна помощь. Есть менеджер сегментированной памяти. Все вроде бы работает нормально, но преподаватель сказал, что в...

Как написать менеджер памяти - C++
помогите написать менеджер памяти на с++

Освобождает ли память процесса менеджер памяти Windows? - C++
Если моя программа допускает кучу memory leaks - ов, то после закрытия процесса программы утерянная (утёкшая) память будет так же...

файловый менеджер - C++
помогите пожауйста!!! задание: написать программу файловый менеджер. желательно на с++. какой нужен компонент и что прописать чтобы...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Algiz
160 / 160 / 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;
 
};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2012, 15:24     Менеджер памяти
Еще ссылки по теме:

Файловый менеджер - C++
Помогите пожалуйста!!! Мне нужен файловый менеджер на Win32... (не знаю как отоброзить содержимое директории..) заранее спасибо

файловый менеджер - C++
Прошу дать информацию на работу с файлами (статьи, книги) в срр, точнее необходимо сделать что-то вроде файлового менеджера с функциями...

Файловый менеджер - C++
Может у кого-то есть исходники, кому не жалко скинуть, делать думаю на visual.

файловый менеджер (консоль) - C++
помогите написать консольный файловый менеджер который может: копировать, удалять, перемещать файлы. буду рад любой помощи (наработки,...

Как написать файловый менеджер - C++
Уважаемые программисты! мне нужно создать какой-нибудь простой файловый менеджер с консолью на С++ ( что такое С++ Builder я знать не знаю,...

Класс менеджер путей к файлу - C++
Добрый вечер, // Main #include <iostream> #include "A.h" #include "Path.h" using namespace std; int main() ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Algiz
160 / 160 / 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     Менеджер памяти
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru