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

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

Восстановить пароль Регистрация
 
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
23.02.2011, 02:25     C++, менеджэр памяти. #1
Здравствуйте форумчане =)

Есть такое задание:
Написать менеджер памяти. Дано 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);
    /* всякие фун-ии */
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2011, 02:25     C++, менеджэр памяти.
Посмотрите здесь:

C++ Выделение памяти (new)
C++ Выделить в памяти 1024 ячейки по 8 байт и вывести их адреса(МИНИ менеджер памяти))
C++ Распределение памяти. Динамическое выделение памяти
резервирование памяти/освобождение памяти для трехмерного массива C++
Освобождение памяти C++
Можно ли разместить переменную в нужную ячейку памяти и реально ли хранить данные, разбросанными по памяти? C++
О памяти C++
Контроль памяти C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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