Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/29: Рейтинг темы: голосов - 29, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 4
1

Аналог malloc

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

Необходимо релизовать свой malloc.Интересует меня следующее: как malloc опирирует памятью? Я понимаю как составляется список блоков памяти. Но каким образом он получает эту память из кучи? Ведь перед ее разбиением на части, ее надо как то зарезервировать. Желательно нужен самый машинно приближенный способ, не выходящий за рамки Си.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2009, 21:57
Ответы с готовыми решениями:

Создание двунаправленного списка с использованием malloc(), free()
При заполнении списка вылазит ошибка "Вызвано исключение по адресу 0x0FE7373F (vcruntime140d.dll) в...

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

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

Если же поменять CoTaskMemAlloc на обычный malloc, то после приёма строки будет access violation
Всем здрасьте. Делаю экспортируемую из dll в C# функцию, которая возвращает строку: DllExport...

6
Maniac
Эксперт С++
1456 / 957 / 159
Регистрация: 02.01.2009
Сообщений: 2,816
Записей в блоге: 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
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 4
19.11.2009, 15:51  [ТС] 3
Ой, и вправду) Что-то я краене сильно затупил.
Спасибо.
0
Evg
Эксперт CАвтор FAQ
21204 / 8220 / 633
Регистрация: 30.03.2009
Сообщений: 22,537
Записей в блоге: 30
19.11.2009, 16:02 4
Цитата Сообщение от bugernol Посмотреть сообщение
Ой, и вправду) Что-то я краене сильно затупил
Это скорее прототип malloc'а. Но если тебе нужен именно прототип (а не универсальная функция), то делать лучше всего именно так, как писал ISergey
0
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 4
19.11.2009, 17:23  [ТС] 5
Фактически нужен realloc,реализованный есесно не в точности как стандартный, а со всякими полезными "наворотами", как собственно сделать это я представляю, много всякой инфы начитался) Однако видимо "перечитался", наткнулся на некий вариант под Линукс, в нем была заюзана sbrk... В итоге стал искать некую ф-ию в винде резервирующую память. И как-то даже в голову не пришло, что создание массива символов из 20 элементов-это выдиление 20 байт из кучи)
0
576 / 570 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
19.11.2009, 17:33 6
В винде вместо sbrk юзается HeapAlloc.
0
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.12.2009, 17:54

MALLOC(or new) for bytes failed
Доброго времени суток! Помогите понять проблему, есть сервер игровой(исходы тож есть), когда...

Аллокатор malloc, как избавиться от CRT
Вот рабочий код HANDLE hFile = CreateFile(&quot;temp.txt&quot;, GENERIC_READ, FILE_SHARE_READ, NULL,...

malloc vs new
Доброго времени суток. Когда я для выделения памяти пользовался malloc/calloc и освобождал с...

New и malloc
Если смотреть на выделение памяти для арифметических типов уступает ли функций new malloc'у в...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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