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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Помогите отредактировать прогу с классами!!! http://www.cyberforum.ru/cpp-beginners/thread191105.html
помогите пожалуйста, я не знаю почему он мне выдает ошибки((( вот условие:Описать класс-контейнер массив указателей "Отрезок на плоскости" (TLine) и "Окружность" (TCircle) . Дан текстовый файл, содержащий информацию о вышеуказанных объектах (не менее 10 строк). Например: точка 5 6 blue отрезок 2 3 5 7 red окружность 5 5 10 white окружность 6 8 5 black отрезок 3 4 8 8 blue Необходимо...
C++ Создание меню в консольном приложении Здравствуйте! Нужно создать меню. Каждый пункт в меню - программа, т.е. в меню можно выбирать какую программу запустить. Подскажите пожалуйста как это реализовать, с пояснениями, пожалуйста http://www.cyberforum.ru/cpp-beginners/thread191098.html
Создать класс Animal C++
Создать класс Animal, содержащий следующие элементы: - поле «вес» float Mass; - поле «пол» char* Sex; - поле «окрас» char* Color; - поле «возраст» int Age; - метод получения веса float GetMass(); - метод получения пола char* GetSex(); - метод получения возраста int GetAge(); - метод получения окраски char* GetColor(); - конструктор с параметрами Animal(float Mass, char* Sex,...
прямое включение C++
здраствуйте! у меня небольшой вопрос по методу прямого включения. Нужно отсортиовать первый рядок матрицы по убыванию)вот код: void Sort_Insertion(int** y, int n , int m) { int i,j,k,*b; b= new int ; for (i=1; i<m; i++) { for (k=0; k<n; k++) {
C++ Подсчет латинских букв http://www.cyberforum.ru/cpp-beginners/thread191069.html
надо подсчитать количество идущих подряд чисел и слова которые состоят только из латинских букв,с чтислами вроде получилось а вот с буквами как то не очень ,кто знает в чем проблема помогите . Буду благодарен если поможете оптимизировать программу и сделать ее более корректной и лаконичной. Вот листинг #include <iostream> #include <cctype> #include <conio.h> using namespace std;
C++ Массивы. Нужно написать 3 задачи на Borland С++. Желательно в самом простом написании. Вот задачи: ЗАДАНИЕ. Задав одномерный массив из n вещественных или целых элементов реализовать обработку массива, как указано в варианте. Длина массива N задается пользователем. Исходные данные задать самостоятельно, учитывая формат элементов массива A. Исходные данные должны вводиться с проверкой на область... подробнее

Показать сообщение отдельно
Saiberg
 Аватар для Saiberg
19 / 19 / 1
Регистрация: 23.09.2010
Сообщений: 193
14.11.2010, 16:32     Менеджер памяти
Хочу написать свои аналоги malloc free.
Загвоздка в том, что я не знаю как освобождать потом память, ведь VirtualFree не может освободить только n-ное кол-во байт.Как поступить ?

Накидал чуть-чуть.Подход думаю впринцепи не правильный
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
static size_t usageAllocSize;//сколько используется
static size_t totalAllocSize;//сколько выделено
static byte* currectAddr;// указатель на текущую пам
static byte* baseAddr;
 
size_t* rounding(size_t* forRounding)//округляет до страницы (в большую сторону)
{
    if (size_t tmp=*forRounding%PAGE_SIZE) 
        *forRounding+=PAGE_SIZE-tmp;
    return forRounding;
}
 
void* my_malloc(const size_t size)
{
    if(!usageAllocSize){//если функция вызывается первый раз.(до этого не выделялась память)
        size_t allocSize=size;
        baseAddr=(byte*)VirtualAlloc(NULL,*rounding(&allocSize),MEM_COMMIT,PAGE_READWRITE);
        currectAddr=baseAddr+size,usageAllocSize+=size,totalAllocSize+=allocSize;
    }
    else{
        size_t freeMemory=totalAllocSize-usageAllocSize;
        if(size<=freeMemory)//если хватает выделенной до этого памяти
            usageAllocSize+=size,currectAddr+=size;
        else {//переаллокация
            size_t allocSize=totalAllocSize/REALLOC_PR;
            if(allocSize<size)//если не хватает 50% памяти выделенной до этого
                allocSize=size;
            byte* temp=(byte*)VirtualAlloc(NULL,*rounding(&allocSize),MEM_COMMIT,PAGE_READWRITE);
            if(temp){
                my_memcpy(temp,baseAddr,usageAllocSize);
                VirtualFree(baseAddr,0,MEM_RELEASE);
                totalAllocSize+=allocSize,usageAllocSize+=size;
                baseAddr=temp,currectAddr=baseAddr+size;
 
            }
        }
    }
    return currectAddr-size;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru