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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
bugernol
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 4
#1

Аналог malloc - C++

18.11.2009, 21:57. Просмотров 2318. Ответов 6
Метки нет (Все метки)

Необходимо релизовать свой malloc.Интересует меня следующее: как malloc опирирует памятью? Я понимаю как составляется список блоков памяти. Но каким образом он получает эту память из кучи? Ведь перед ее разбиением на части, ее надо как то зарезервировать. Желательно нужен самый машинно приближенный способ, не выходящий за рамки Си.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2009, 21:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Аналог malloc (C++):

Аналог WPF для C++ - C++
Есть ли аналог WPF ... какая нибудь среда разработки где вместо XAML это HTML+CSS+JavaScript а кодить на C++ например... можно и C# -...

Посоветуйте аналог Borland c++ - C++
Знаю ,что аналог является Вижуал Бэйзик ,а есть какие-нибудь еще современные аналоги? Какие бесплатные аналоги есть?

Аналог packed record в C - C++
в С описать packed record, как в паскале. т.е. нужно чтобы: struct { byte var1; PDWORD var2; byte var3; } а; весила 6 байт.

Ищу аналог Visual Studio - C++
Интересует аналоги Visual Studio, как под винду, так и под linux. Требование - это наличие аналога intellisense ( с автодополнением и...

Какой есть аналог CreateGraphics из C#? - C++
Доброго времени суток. Собственно проблема возникла во время конвертации кода с C# на C++. Есть шарповский код: Graphics g =...

Аналог декоратора Python или ненормальное програмирование - C++
Всем привет. Часто приходится делать одну и ту же вещь в коде: DWORD time = ::GetTickCount(); bool result = SomeFunc(); ...

6
ISergey
Maniac
Эксперт С++
1375 / 886 / 52
Регистрация: 02.01.2009
Сообщений: 2,661
Записей в блоге: 1
18.11.2009, 22:22 #2
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
static char buff[1024];
static char *p = buff;
static size_t free_size = 1024;
 
void *my_malloc(size_t size){
    char *res = 0;
    if(free_size > size){
        res = p;
        p += size;
        free_size -= size;
    }else std::cout << "error\n";
 
    return res;
}
int main()
{
    char *p  =  (char*)my_malloc(sizeof(char)*7);
    char *p1 =  (char*)my_malloc(sizeof(char)*8);
    char *p2 =  (char*)my_malloc(sizeof(char)*10);
 
    strcpy(p,  "string");
    strcpy(p1, "Testing");
    strcpy(p2, "123456789");
 
    std::cout << p << std::endl;
    std::cout << p1 << std::endl;
    std::cout << p2 << std::endl;
 
    //---
    for(int i = 0; i < 30; ++i)
        std::cout << buff[i];
    return 0;
}
1
bugernol
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 4
19.11.2009, 15:51  [ТС] #3
Ой, и вправду) Что-то я краене сильно затупил.
Спасибо.
0
Evg
Эксперт CАвтор FAQ
17950 / 6181 / 413
Регистрация: 30.03.2009
Сообщений: 16,973
Записей в блоге: 27
19.11.2009, 16:02 #4
Цитата Сообщение от bugernol Посмотреть сообщение
Ой, и вправду) Что-то я краене сильно затупил
Это скорее прототип malloc'а. Но если тебе нужен именно прототип (а не универсальная функция), то делать лучше всего именно так, как писал ISergey
0
bugernol
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 4
19.11.2009, 17:23  [ТС] #5
Фактически нужен realloc,реализованный есесно не в точности как стандартный, а со всякими полезными "наворотами", как собственно сделать это я представляю, много всякой инфы начитался) Однако видимо "перечитался", наткнулся на некий вариант под Линукс, в нем была заюзана sbrk... В итоге стал искать некую ф-ию в винде резервирующую память. И как-то даже в голову не пришло, что создание массива символов из 20 элементов-это выдиление 20 байт из кучи)
0
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
19.11.2009, 17:33 #6
В винде вместо sbrk юзается HeapAlloc.
0
bugernol
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 4
10.12.2009, 17:54  [ТС] #7
Появился еще один вопрос:
Допустим у меня етсь ф-ия выделяющая память из кучи. Тобиш резервация char массива. Однако что если мне придется вызывать ее n раз?
C++
1
2
3
4
void mem()
{
char buff[80];
}
Вызову я это 10 раза, но результат то будет один. Динамическим размер как понимаю сделать нельзя. А выделять сразуже массив на 1000000...000 тоже будет очень не практично)
Хотя возможно я очень сильно туплю...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2009, 17:54
Привет! Вот еще темы с ответами:

Запутался с malloc и realloc - C++ Builder
Добрый день. Не могу понять какой размер нужно выделить для массива указателей на указатели. Какого размера должен быть указатель на на...

Создать, заполнить и вывести массив с использованием функции malloc() - C++ Builder
Необходимо создать массив( с помощью malloc) из 100 000 элементов(рандом) и записать с помощью malloc его в блокнот c++ builder

Аналог StringGrid - C++ Builder
Доброго дня. Ребята подскажите есть ли какой стандартный аналог StringGrid? Нужно для вывода/редактирования таблицы из 4 колонок и до 200...

аналог TImageList - C++ Builder
Доброго дня! Подскажите, есть ли такие компоненты, которые позволяют хранить нестандартные изображения в плане размеров и качества? ...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
10.12.2009, 17:54
Ответ Создать тему
Опции темы

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