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

C++

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

Аналог malloc - C++

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

Необходимо релизовать свой 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
Эксперт С++
1346 / 879 / 51
Регистрация: 02.01.2009
Сообщений: 2,643
Записей в блоге: 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
Эксперт CАвтор FAQ
17299 / 5547 / 347
Регистрация: 30.03.2009
Сообщений: 15,101
Записей в блоге: 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
557 / 551 / 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
Ответ Создать тему
Опции темы

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