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

Аналог malloc - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
bugernol
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 4
18.11.2009, 21:57     Аналог malloc #1
Необходимо релизовать свой malloc.Интересует меня следующее: как malloc опирирует памятью? Я понимаю как составляется список блоков памяти. Но каким образом он получает эту память из кучи? Ведь перед ее разбиением на части, ее надо как то зарезервировать. Желательно нужен самый машинно приближенный способ, не выходящий за рамки Си.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2009, 21:57     Аналог malloc
Посмотрите здесь:

C++ Linux malloc
C++ malloc/realloc
И снова malloc... C++
calloc vs malloc C++
malloc в С++ C++
malloc() C++
C++ malloc vs new
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1345 / 878 / 51
Регистрация: 02.01.2009
Сообщений: 2,642
Записей в блоге: 1
18.11.2009, 22:22     Аналог malloc #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;
}
bugernol
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 4
19.11.2009, 15:51  [ТС]     Аналог malloc #3
Ой, и вправду) Что-то я краене сильно затупил.
Спасибо.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16949 / 5354 / 330
Регистрация: 30.03.2009
Сообщений: 14,396
Записей в блоге: 26
19.11.2009, 16:02     Аналог malloc #4
Цитата Сообщение от bugernol Посмотреть сообщение
Ой, и вправду) Что-то я краене сильно затупил
Это скорее прототип malloc'а. Но если тебе нужен именно прототип (а не универсальная функция), то делать лучше всего именно так, как писал ISergey
bugernol
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 4
19.11.2009, 17:23  [ТС]     Аналог malloc #5
Фактически нужен realloc,реализованный есесно не в точности как стандартный, а со всякими полезными "наворотами", как собственно сделать это я представляю, много всякой инфы начитался) Однако видимо "перечитался", наткнулся на некий вариант под Линукс, в нем была заюзана sbrk... В итоге стал искать некую ф-ию в винде резервирующую память. И как-то даже в голову не пришло, что создание массива символов из 20 элементов-это выдиление 20 байт из кучи)
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
19.11.2009, 17:33     Аналог malloc #6
В винде вместо sbrk юзается HeapAlloc.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2009, 17:54     Аналог malloc
Еще ссылки по теме:

new на malloc C++
C++ new vs malloc
new, malloc, C++
C++ Malloc vs new
C++ New и malloc

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

Или воспользуйтесь поиском по форуму:
bugernol
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 4
10.12.2009, 17:54  [ТС]     Аналог malloc #7
Появился еще один вопрос:
Допустим у меня етсь ф-ия выделяющая память из кучи. Тобиш резервация char массива. Однако что если мне придется вызывать ее n раз?
C++
1
2
3
4
void mem()
{
char buff[80];
}
Вызову я это 10 раза, но результат то будет один. Динамическим размер как понимаю сделать нельзя. А выделять сразуже массив на 1000000...000 тоже будет очень не практично)
Хотя возможно я очень сильно туплю...
Yandex
Объявления
10.12.2009, 17:54     Аналог malloc
Ответ Создать тему
Опции темы

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