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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.97
M__A__K
47 / 47 / 2
Регистрация: 09.11.2010
Сообщений: 306
#1

Исходный код malloc - C++

29.11.2011, 18:15. Просмотров 4068. Ответов 40
Метки нет (Все метки)

Нужен исходный код функции malloc. К сожалению, поиск результатов не принёс.
В качестве ответа хотелось бы видеть либо код, либо ссылку на код
Заранее благодарен
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2011, 18:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Исходный код malloc (C++):

разбираем исходный код - C++
есть такой код. помогите разобраться какая строчка что делает. премногоблагодарен заранее :) код рабочий. проверено :) #include <time.h> ...

Исходный код LUNIX - C++
Подскажите, где можно посмотреть исходник LUNIX. Я так понимаю - это не один гигантский код, а разбитый на части. Где можно посмотреть код...

Скомпилировать исходный код - C++
Загрузить и скомпилировать исходный код эмулятора IA-32 Bochs. Собственно, исходный код я нашёл, а вот скомпилировать как-то не получается,...

Исправьте исходный код - C++
Ребят, я нубас в с++ и по этому прошу вас поправьте мой исход что бы он работал

Из exe в исходный код - C++
Здраствуйте. Вообщем, есть *.exe файл, написанный на Dev-C++. Можно ли из него вытащить исходный код? ( Есть ли некий аналог .NET...

Исходный код программы! - C++
привет всем, ребята , я начинающий программист С++ , учу уже 3-й месяц, делаю всякие задания из интернета , делаю только в консоле , хочу...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
29.11.2011, 18:18 #2
http://www.google.com/codesearch#pFm...lloc.c&type=cs
fasked
29.11.2011, 18:24
  #3

Не по теме:

Nameless One, а я думал Google code search уже прикрыли Потом погуглил

будет закрыт вместе с доступом к API 15 января 2012 года

Nameless One
29.11.2011, 18:32
  #4

Не по теме:

fasked, а можно ссылочку, почему это они его закрывают? Не нужен? А то я фак ихний проглядел, ничего не нашел

fasked
29.11.2011, 18:35
  #5

Не по теме:

Nameless One, вроде как доходов не приносил. Есть только ответ от девелоперов сервиса вот здесь - http://groups.google.com/group/googl...2e2908c47df068

M__A__K
47 / 47 / 2
Регистрация: 09.11.2010
Сообщений: 306
29.11.2011, 18:35  [ТС] #6
у меня дилемма: программист профессионал мне говорит, что malloc не намного проигрывает (если вообще проигрывает) HeapAlloc в производительности + с ней меньше возни, посему следует использовать именно malloc; преподаватель же в институте заверяет, что malloc реализована через HeapAlloc и проигрывает ей в производительности (т.к. кроме непосредственного вызова HeapAlloc там ещё находится куча проверок), путём отказа от malloc в сторону HeapAlloc при интенсивной работой с памятью, ему (по его словам) удавалось выиграть по времени в 2 раза, потому следует использовать HeapAlloc.
в коде я вызова HeapAlloc не нашёл (но не факт, что данный вызов скрывается в каком-нибудь другом коде, на который ссылается выше предложенный код)
так что же лучше использовать?
fasked
Эксперт С++
4934 / 2514 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.11.2011, 18:39 #7
M__A__K, HeapAlloc функция из Windows API. Скорее всего malloc в Win32 реализован именно через нее. В реализации glibc само собой такого нет. Лично я бы использовал malloc.
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
29.11.2011, 18:40 #8
M__A__K, HeapAlloc - это такая WinAPI-функция?
Через что сделан malloc - зависит полностью от реализации. Может быть, на винде для cl.exe он всегда сделан через HeapAlloc. Но используя его вместо стандартной функции, ты ограничиваешь себя одной платформой. А по ссылке - исходники libc для яблока
prazuber
109 / 109 / 3
Регистрация: 29.04.2010
Сообщений: 240
29.11.2011, 18:47 #9
Вариант от мелкомягких.
M__A__K
47 / 47 / 2
Регистрация: 09.11.2010
Сообщений: 306
29.11.2011, 18:47  [ТС] #10
спасибо

так а реально ли значительно выиграть в производительности, если использовать HeapAlloc вместо malloc?
fasked
Эксперт С++
4934 / 2514 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.11.2011, 18:48 #11
Цитата Сообщение от M__A__K Посмотреть сообщение
а реально ли значительно выиграть в производительности, если использовать HeapAlloc вместо malloc?
Реально, но стоит ли оно того?
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
29.11.2011, 18:50 #12
M__A__K, а ты напиши тестовую программу, сделай замеры и выложи результаты сюда. Думаю, результаты будут интересны не только тебе.
Обычно стандартные функции на отдельной платформе как раз и определены в рамках API системы. А стандартные функции лишь предоставляют более простой и унифицированный интерфейс
M__A__K
47 / 47 / 2
Регистрация: 09.11.2010
Сообщений: 306
29.11.2011, 18:51  [ТС] #13
PraZuBeR, всё равно без HeapAlloc
prazuber
109 / 109 / 3
Регистрация: 29.04.2010
Сообщений: 240
29.11.2011, 18:52 #14
Немного подебажил malloc в студии, в итоге пришел в функцию
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
40
41
42
__forceinline void * __cdecl _heap_alloc (size_t size)
 
{
#ifndef _WIN64
    void *pvReturn;
#endif  /* _WIN64 */
 
    if (_crtheap == 0) {
        _FF_MSGBANNER();    /* write run-time error banner */
        _NMSG_WRITE(_RT_CRT_NOTINIT);  /* write message */
        __crtExitProcess(255);  /* normally _exit(255) */
    }
 
#ifdef _WIN64
    return HeapAlloc(_crtheap, 0, size ? size : 1);
#else  /* _WIN64 */
    if (__active_heap == __SYSTEM_HEAP) {
        return HeapAlloc(_crtheap, 0, size ? size : 1);
    } else
    if ( __active_heap == __V6_HEAP ) {
        if (pvReturn = V6_HeapAlloc(size)) {
            return pvReturn;
        }
    }
#ifdef CRTDLL
    else if ( __active_heap == __V5_HEAP )
    {
        if (pvReturn = V5_HeapAlloc(size)) {
            return pvReturn;
        }
    }
#endif  /* CRTDLL */
 
    if (size == 0)
        size = 1;
 
    size = (size + BYTES_PER_PARA - 1) & ~(BYTES_PER_PARA - 1);
 
    return HeapAlloc(_crtheap, 0, size);
 
#endif  /* _WIN64 */
}
Так что да, на винде malloc сделан через HeapAlloc.
Погружение: malloc -> _nh_malloc_dbg -> _nh_malloc_dbg_impl -> _heap_alloc_dbg_impl -> _heap_alloc -> HeapAlloc
M__A__K
47 / 47 / 2
Регистрация: 09.11.2010
Сообщений: 306
29.11.2011, 18:56  [ТС] #15
PraZuBeR, вот она! вот она, рыба моей мечты!

Nameless One, сейчас сделаю
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2011, 18:56
Привет! Вот еще темы с ответами:

Исходный код исполняемого файла C++... - C++
Искал в инете декомпилятор, нашёл OLLYDBG, но ничего, похожего на исходный код он мне не выдал... Помогите плиз вытащить исходник из...

Загрузить исходный код в проект - C++
Доброе время суток!! У меня возникла проблема. Скачал исходный код Grid Analysis and Display System (GrADS) вот ссылка...

Как модифицировать исходный код программы - C++
Здравствуйте,доброго времени суток. Задали мне задачу с которой я не могу справится. Если можете, помогите пожалуйста. ЗАДАЧА : ...

Разбить исходный код на main.cpp и my.h - C++
#include <windows.h> #include <iostream> using namespace std; class vremya { public: int vvod(); int vivod(); ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.11.2011, 18:56
Закрытая тема Создать тему
Опции темы

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