Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.79/47: Рейтинг темы: голосов - 47, средняя оценка - 4.79
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308

Исходный код malloc

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

Студворк — интернет-сервис помощи студентам
Нужен исходный код функции malloc. К сожалению, поиск результатов не принёс.
В качестве ответа хотелось бы видеть либо код, либо ссылку на код
Заранее благодарен
1
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.11.2011, 18:15
Ответы с готовыми решениями:

Подкорректировать исходный код
Здравствуйте,друзья.Сам я не программист поэтому прошу помощи.Собрал метеостанцию.Все работает ,при выводе показаний часов ,градусов и...

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

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

40
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
29.11.2011, 18:18
http://www.google.com/codesear... .c&type=cs
2
29.11.2011, 18:24

Не по теме:

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

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

0
29.11.2011, 18:32

Не по теме:

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

0
29.11.2011, 18:35

Не по теме:

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

1
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
29.11.2011, 18:35  [ТС]
у меня дилемма: программист профессионал мне говорит, что malloc не намного проигрывает (если вообще проигрывает) HeapAlloc в производительности + с ней меньше возни, посему следует использовать именно malloc; преподаватель же в институте заверяет, что malloc реализована через HeapAlloc и проигрывает ей в производительности (т.к. кроме непосредственного вызова HeapAlloc там ещё находится куча проверок), путём отказа от malloc в сторону HeapAlloc при интенсивной работой с памятью, ему (по его словам) удавалось выиграть по времени в 2 раза, потому следует использовать HeapAlloc.
в коде я вызова HeapAlloc не нашёл (но не факт, что данный вызов скрывается в каком-нибудь другом коде, на который ссылается выше предложенный код)
так что же лучше использовать?
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
29.11.2011, 18:39
M__A__K, HeapAlloc функция из Windows API. Скорее всего malloc в Win32 реализован именно через нее. В реализации glibc само собой такого нет. Лично я бы использовал malloc.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
29.11.2011, 18:40
M__A__K, HeapAlloc - это такая WinAPI-функция?
Через что сделан malloc - зависит полностью от реализации. Может быть, на винде для cl.exe он всегда сделан через HeapAlloc. Но используя его вместо стандартной функции, ты ограничиваешь себя одной платформой. А по ссылке - исходники libc для яблока
0
114 / 114 / 13
Регистрация: 29.04.2010
Сообщений: 240
29.11.2011, 18:47
Вариант от мелкомягких.
0
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
29.11.2011, 18:47  [ТС]
спасибо

так а реально ли значительно выиграть в производительности, если использовать HeapAlloc вместо malloc?
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
29.11.2011, 18:48
Цитата Сообщение от M__A__K Посмотреть сообщение
а реально ли значительно выиграть в производительности, если использовать HeapAlloc вместо malloc?
Реально, но стоит ли оно того?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
29.11.2011, 18:50
M__A__K, а ты напиши тестовую программу, сделай замеры и выложи результаты сюда. Думаю, результаты будут интересны не только тебе.
Обычно стандартные функции на отдельной платформе как раз и определены в рамках API системы. А стандартные функции лишь предоставляют более простой и унифицированный интерфейс
0
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
29.11.2011, 18:51  [ТС]
PraZuBeR, всё равно без HeapAlloc
0
114 / 114 / 13
Регистрация: 29.04.2010
Сообщений: 240
29.11.2011, 18:52
Немного подебажил 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
2
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
29.11.2011, 18:56  [ТС]
PraZuBeR, вот она! вот она, рыба моей мечты!

Nameless One, сейчас сделаю
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
29.11.2011, 18:57
Цитата Сообщение от fasked Посмотреть сообщение
Реально
Я вот только на счёт "значительно" сомневаюсь. Если переноса программы на немелкомягкие платформы абсолютно точно не предполагается, при этом требования к программе за гранью фанатизма, наверное лучше исключительно WinAPI функциями пользоваться. И то, что-то не верится, чтобы malloc аж в 2 раза медленнее оказалась. Может код кривой был?..
0
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
29.11.2011, 19:28  [ТС]
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
43
44
45
46
47
48
#include <iostream>
#include <Windows.h>
#include <time.h>
#include <conio.h>
 
using std::cin;
using std::cout;
using std::endl;
 
const int TEST_QUANTITY = 100000;
 
int main()
{
    unsigned int mem_size[TEST_QUANTITY];
    srand( (unsigned int) time( NULL ) );
    for ( int i = 0; i < TEST_QUANTITY; mem_size[i] = rand(), ++i );
    
    int begin_time;
    int end_time;
    int * ptr;
 
    begin_time = GetTickCount();
    for ( int i = 0; i < TEST_QUANTITY; ++i )
    {
        ptr = (int *) malloc( mem_size[i] * 4 );
        free( ptr );
    }
    end_time = GetTickCount();
 
    cout << "Malloc total time: " << end_time - begin_time << endl;
 
    HANDLE hHeap = GetProcessHeap();
 
    begin_time = GetTickCount();
    for ( int i = 0; i < TEST_QUANTITY; ++i )
    {
        ptr = (int *) HeapAlloc( hHeap, 0, mem_size[i] * 4 );
        HeapFree( hHeap, HEAP_NO_SERIALIZE, ptr );
    }
    end_time = GetTickCount();
 
    cout << "HeapAlloc total time: " << end_time - begin_time << endl;
 
    cout << "\nPress any key...";
    _getch();
 
    return 0;
}
при таком раскладе у меня для malloc ~ 900, а для HeapAlloc ~ 40
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
29.11.2011, 19:45
Цитата Сообщение от M__A__K Посмотреть сообщение
при таком раскладе у меня для malloc ~ 900, а для HeapAlloc ~ 40
Ваш код, абсолютно ничего не менял:
Code
1
2
3
4
5
6
7
C:\c_cpp\system>g++ -o malloc_vs_heapalloc malloc_vs_heapalloc.cpp
 
C:\c_cpp\system>malloc_vs_heapalloc.exe
Malloc total time: 593
HeapAlloc total time: 594
 
Press any key...
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
29.11.2011, 19:50
easybudda, а если мелкомягким cl попробовать?
0
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
29.11.2011, 19:50  [ТС]
хм
я изначально компилировал в VS 2010, в Debug режиме. сейчас поменял на Release и у меня результаты для malloc теперь тоже ~ 40
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.11.2011, 19:50
Помогаю со студенческими работами здесь

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

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

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

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

Исходный код библиотеки
Здравствуйте Подскажите, есть ли какая-либо возможность получить исходный код библиотеки .lib на с++ 3.11? И если да, то сколько это...


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

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru