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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Найдите ошибку http://www.cyberforum.ru/cpp-beginners/thread1096724.html
Найдите ошибку Ошибка 1 error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. g:\users\adilbek\documents\visual studio 2013\projects\consoleapplication42\consoleapplication42\исходный код.cpp 9 1 ConsoleApplication42 #include <iostream> #include <cstdio> #include...
C++ copy, iterator, vector #include <istream> #include <vector> #include <algorithm> #include <iterator> int main( ) { std::vector <int> ivec; http://www.cyberforum.ru/cpp-beginners/thread1096676.html
C++ Написать программу для тестирования
народ подскажите пожалуйста как написать код!! надо чтобы прога выдавала вопрос который я захочу и потом при правильном ответе она показывала другой вопрос а если не правильно то обратно тот же вопрос оставляла.
C++ Падает программа при использовании DLL
Раньше писал DLL для одного приложения, теперь мне понадобилось его использовать в другом. Подключил lib, хедер и саму DLL положил рядом с исполняемым файлом, но при использовании функций из этой библиотеки, программа завершается с ошибкой: -1073741515 (0xc0000135). В первом приложении всё работает нормально. В чём может быть дело?
C++ Управление строками http://www.cyberforum.ru/cpp-beginners/thread1096654.html
Всем привет! Я изучаю с++ недавно, в как учебное пособие использую "С++ для чайников". Пример перепечатал с книги, а он не работает! По возможности укажите не только ошибку ну и почему нужно было сделать так, а не иначе! Вот в чем суть: //Concatenate - объединение двух строк, которые разделяются символом #include<stdio.h> #include<iostream>
C++ Класс "Окружность" с данными центр и радиус окружности. Помогите, пожалуйста, решить задачу: Класс "Окружность" с данными центр и радиус окружности. Задание. 1. Объявить класс в соответствии с вариантом и определить для него 2-3 конструктора. 2. Определить функции-методы класса для ввода и вывода свойств внутри объявления класса. 3. Составить программу, которая определяет три объекта класса и выводит их на экран. Первый объект должен... подробнее

Показать сообщение отдельно
vakonshin
0 / 0 / 0
Регистрация: 14.02.2014
Сообщений: 3
14.02.2014, 20:48  [ТС]     Как написать менеджер памяти
Требуется разработать менеджер памяти (назовем его ToyMP), управляющий MemSize (см.ниже) ячейками памяти. Предполагаем, что «игрушечное» машинное слово имеет размер 64 бита, т.е. каждая ячейка памяти имеет размер 8 байт. Это означает, что за каждый запрос менеджер памяти может выделить или освободить блок памяти, кратный 8-ми байтам. Начальный адрес такого участка, вычисляемый относительно начала нашей «игрушечной» памяти, также должен быть кратен 8-ми байтам. В частности, это означает, что если при выделении памяти требуется всего один байт, менеджер памяти выделит 8 байт (из которых 7 не будут использоваться).
MemSize вводит пользователь с клавиатуры, и с помощью оператора new [] у операционной системы из общей памяти выделяется («забирается») MemSize 64-битных слов память. Тут нужно понимать, что у нашего менеджера памяти вначале нет подконтрольной памяти, поэтому ее (MemSize слов) нужно забрать (выделить) у основного менеджера памяти. Например, для выделения трех 64-битных слов вызывается new char[24]. После этого менеджер памяти готов выделить от 1 до 3 64-битных слов. (почему 3, а не 24? не 6?)-потому что в первом абзаце об этом сказано
К ToyMP можно обращаться с помощью следующих (пользовательских) функций:
• функция void * toymp_AllocateBlock (size_t sizeBlock); выделяет блок памяти размера sizeBlock и возвращает указатель на выделенный участок;
• функция void toymp_FreeBlock(void * pOldMem); освобождает ранее выделенный участок памяти;
• функция void toympInitializeMemoryManager (size_t MemSize) инициализации менеджера памяти (вызывается перед работой с менеджером);
• функция void toymp_DeinitializeMemoryManager () финализации менеджера памяти (вызывается после окончания работы с менеджером) в функции toymp_DeinitializeMemoryManager менеджер должен освобождать всю динамическую выделенную память.
Вместо size_t можно использовать unsigned int, но использовать size_t более профессионально. Toymp_AllocateBlock возвращает указатель на ячейку внутри памяти подвластной ToyMP. Допустим, в примере, при начальном выделении памяти, new char[24] вернул адрес 0x123456700. Мы запрашиваем у менеджера памяти 1 слово (MemSize=1) с помощью toymp_AllocateBlock(1) toymp_AllocateBlock возвращает нам 0x123456700. Если мы еще раз запрашиваем 1 слово toymp_AllocateBlock(1) возвращает 0x123456704. Если мы вызываем toymp_FreeBlock(0x123456700), то должен освободиться
первый блок, т.е. начальный и последний блоки будет свободными, а средний блок по адресу 0x123456704 будет занят.

Ваш менеджер памяти должен:
• реализовывать следующие стратегии.
Описание стратегий и подробности см. ниже по тексту. Стратегия выбирается пользователем один раз при запуске программы.
o первый подходящий (first fit);
o наименьший среди подходящих (best fit);
o наибольший среди подходящих (worst fit);
• освобождать только те блоки памяти, которые он выделил (если запрошен участок памяти, который не был ранее выделен, то необходимо просто выдать предупреждение и продолжить работу не освобождая блок);
• выдавать предупреждение, если нет возможности выделить память нужного размера;
• уметь переиспользовать освобожденную память (т.е. если пользователь запросил, а затем освободил участок памяти, то этот участок может быть в дальнейшем снова выделен);
• в функции toymp_DeinitializeMemoryManager менеджер должен освобождать всю динамическую выделенную память;
• при освобождении участка памяти рядом с другими свободными участками памяти необходимо «соединять» такие участки памяти, чтобы получался один участок свободной памяти охватывающий рядом стоящие освобождаемые.
 
Текущее время: 10:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru