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

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

Войти
Регистрация
Восстановить пароль
 
GAME
23 / 23 / 3
Регистрация: 31.10.2009
Сообщений: 199
#1

C++, менеджэр памяти. - C++

23.02.2011, 02:25. Просмотров 643. Ответов 0
Метки нет (Все метки)

Здравствуйте форумчане =)

Есть такое задание:
Написать менеджер памяти. Дано 10Кб памяти(оперативной так сказать), нужно написать класс для работы с ней, т.е. функции выделения памяти, записи, чтения, де фрагментации, дампа памяти.
C++
1
2
3
4
5
6
int AllocMemory(int size);
void FreeMemory(int MemoryHandle);
bool WriteMemory(int MemoryHandle, int Offset, int Size, void *Data);
bool ReadMemory(int MemoryHandle, int Offset, int Size, void *Data);
void DumpMemory(void);
void Defragmentation();
В общем суть такая, функция AllocMemory возвращает описатель выделенной памяти или 0 если не удалось выделить память, но так как при де фрагментации блоки смещаются внутри класса у нас будет ещё один описатель(внутренний), который будет указывать реальное положение блока памяти в массиве.
Хотелось-бы разместить эти указатели в тех-же 10 килобайтах , как участок зарезервированной памяти.
Возникает вопрос делать его фиксированного размера (-если да то какого) или переменного ?
Может быть у кого-то есть какие - нибудь идеи по этому поводу ...
Допустим эти описатели помещать в конец массива а сами блоки записывать с начала.
И как лучше будет с помощью классов реализовать(саму структуру классов, с кодом я сам разберусь)

Пока решил делать в два класс - собственно главный класс

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class MemoryManager
{
    BYTE *memory;
    MemoryBlock *BlockList;
    int *MemorySize;
private:
    /* какие-нибудь фун-ии */
public:
    MemoryManager();
    ~MemoryManager();
    int AllocMemory(int size);
    void FreeMemory(int MemoryHandle);
    bool WriteMemory(int MemoryHandle, int Offset, int Size, void *Data);
    bool ReadMemory(int MemoryHandle, int Offset, int Size, void *Data);
    void DumpMemory(void);
};
и класс блока в памяти
C++
1
2
3
4
5
6
7
8
9
10
11
class MemoryBlock
{
    int externalHandle;
    int internalHandle;
    int blockSize;
public:
    MemoryBlock(int);
    ~MemoryBlock();
    void MoveBlock(int newInternalHandle);
    /* всякие фун-ии */
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2011, 02:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос C++, менеджэр памяти. (C++):

Выделить в памяти 1024 ячейки по 8 байт и вывести их адреса(МИНИ менеджер памяти)) - C++
Вот тут появилась такая интересная задача: требуется сделать программу которая управляет 1024 ячейками памяти по 8 байт каждая. т.е. за...

Можно ли разместить переменную в нужную ячейку памяти и реально ли хранить данные, разбросанными по памяти? - C++
Добрый день. Не могу найти информацию по двум вопросам : 1) могу ли я разместить переменную в нужную ячейку памяти. Например: int a...

Резервирование памяти/освобождение памяти для трехмерного массива - C++
Необходимо создать трехмерный массив (A), в котором элементы вдоль направления Z выли бы выровнены по 16 байт. Есть две проблемы: ...

Выделение памяти, проверка на утечку памяти - C++
Интересуют два вопроса: 1. Правильно ли устроен алгоритм выделения, удаление и запись ячейки памяти? Может быть, есть более простые...

Распределение памяти. Динамическое выделение памяти - C++
an-1 an-2 ... a2

Перезагружается компьютер после установки памяти + нет настройки памяти в BIOS - Оперативная память
Добрый день! Помогите пожалуйста разобраться в следующей ситуации, после установки оперативной памяти Kingston DDR3-1600 8192MB...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2011, 02:25
Привет! Вот еще темы с ответами:

Выбор памяти для материнской памяти Gigabyte GA-F2A88XN-WIFI - Оперативная память
Всем доброго дня! Есть материнская плата Gigabyte GA-F2A88XN-WIFI в ее спецификациях на официальном сайте в разделе Memory есть...

1 Гб не буферизованной памяти или 2 Гб памяти с буферизацией. Как это понимать ? - Компьютерное железо
1 Гб не буферизованной памяти или 2 Гб памяти с буферизацией Как это понимать ? И что будет если я установлю 2 Гб не буферизованной...

В поле дампа памяти вывести на экран содержимое данной памяти [bx+di] - Assembler
Имеется функция IDIV word ptr . Но предварительно мы записываем значение в данную область памяти т.е mow ,0005. вопрос,как мне в поле...

Сколько памяти Вам действительно нужно?(полезная статья при выборе памяти) - Оперативная память
Сколько памяти Вам действительно нужно? Компьютер поставляется со стандартным набором памяти, и разработчики программного обеспечения...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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