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

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

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

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

29.11.2011, 18:15. Просмотров 4075. Ответов 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-й месяц, делаю всякие задания из интернета , делаю только в консоле , хочу...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
29.11.2011, 18:57 #16
Цитата Сообщение от fasked Посмотреть сообщение
Реально
Я вот только на счёт "значительно" сомневаюсь. Если переноса программы на немелкомягкие платформы абсолютно точно не предполагается, при этом требования к программе за гранью фанатизма, наверное лучше исключительно WinAPI функциями пользоваться. И то, что-то не верится, чтобы malloc аж в 2 раза медленнее оказалась. Может код кривой был?..
M__A__K
47 / 47 / 2
Регистрация: 09.11.2010
Сообщений: 306
29.11.2011, 19:28  [ТС] #17
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
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
29.11.2011, 19:45 #18
Цитата Сообщение от M__A__K Посмотреть сообщение
при таком раскладе у меня для malloc ~ 900, а для HeapAlloc ~ 40
Ваш код, абсолютно ничего не менял:
Код
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...
fasked
Эксперт С++
4934 / 2514 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.11.2011, 19:50 #19
easybudda, а если мелкомягким cl попробовать?
M__A__K
47 / 47 / 2
Регистрация: 09.11.2010
Сообщений: 306
29.11.2011, 19:50  [ТС] #20
хм
я изначально компилировал в VS 2010, в Debug режиме. сейчас поменял на Release и у меня результаты для malloc теперь тоже ~ 40
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
29.11.2011, 19:57 #21
Цитата Сообщение от fasked Посмотреть сообщение
а если мелкомягким cl попробовать?
Код
Microsoft (R) Incremental Linker Version 8.00.50727.42
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:malloc_vs_heapalloc.exe
malloc_vs_heapalloc.obj

C:\c_cpp\system>malloc_vs_heapalloc.exe
Malloc total time: 609
HeapAlloc total time: 641

Press any key...
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.11.2011, 20:04 #22
Копаете совсем не в ту сторону. Если важна производительность при выделении памяти, то нужно выделять пул памяти и использовать память из него. Будет всего одно обращение к WinAPI. Это самый быстрый способ. Любое обращение к ядру системы требует перехода в KernelMode, а так всё быдет выполняться в ЮзерМод.
Свой распределитель памяти это наше всё.

Добавлено через 5 минут
Цитата Сообщение от M__A__K Посмотреть сообщение
при таком раскладе у меня
31 миллисекунда для обоих.
M__A__K
47 / 47 / 2
Регистрация: 09.11.2010
Сообщений: 306
29.11.2011, 20:06  [ТС] #23
Deviaphan, я больше пытаюсь выбрать между HeapAllioc и malloc, а не оптимизировать работу с памятью
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.11.2011, 20:09 #24
Цитата Сообщение от M__A__K Посмотреть сообщение
я больше пытаюсь выбрать между HeapAllioc и malloc
А смысл тогда в чём?

Добавлено через 1 минуту
Ты же обратил внимание, что приведённый код malloc для дебага? В релизе совсем другая функция, без постфикса _dbg.
M__A__K
47 / 47 / 2
Регистрация: 09.11.2010
Сообщений: 306
29.11.2011, 20:11  [ТС] #25
Deviaphan, смысл в том, что если нет никаких специфических операций с памятью, то нужно использовать malloc (как выяснилось), т.к. это менее напряжно с точки зрения кодирования и проигрыша в производительности нет
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.11.2011, 20:23 #26
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вопрос не про malloc, а зачем понадобилось использовать HeapAllioc .
А если ты на С++ программируешь, то я тебя найду...
M__A__K
47 / 47 / 2
Регистрация: 09.11.2010
Сообщений: 306
29.11.2011, 20:32  [ТС] #27
HeapAlloc сказал использовать препод (предмет "Системное программирование", изучаем winapi, пишем на С, из С++ только ввод/вывод на консоль разрешают делать). на вопрос "зачем?", он сказал, что это оптимальней. вот я начал выяснять, действительно ли это оптимальней/удобней/правильней

программируя на с++ я вообще использую new()
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
29.11.2011, 20:35 #28
M__A__K, не спорьте с преподом, делайте, как он говорит - больше шансов будет сдать с первого раза. Но саму идею Вы верно поняли...
M__A__K
47 / 47 / 2
Регистрация: 09.11.2010
Сообщений: 306
29.11.2011, 20:39  [ТС] #29
easybudda, да я особо с ним не спорю, просто хочется понимать, что и зачем делаешь, но спасибо за совет
и спасибо, что помогли разобраться
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
30.11.2011, 08:26 #30
Цитата Сообщение от M__A__K Посмотреть сообщение
на с++ я вообще использую new()
Фууууу! Не придётся тебя искать. Хорошо.)
Делать нужно как просит препод, но только на лабах. Верить олдскульным преподам не стоит, многие ихние знания настолько устарели, что больше вредят, чем пользу приносят.
Как щяс помню одного такого, который рассказывал об оптимизациях. Его оптимизированный код работал хуже, чем код генерируемый компилятором по простому коду. Чтобы его оптимизация "показала себя", он отключал все оптимизации компилятора и гордо демонстрировал увеличение скорости в оптимизированном варианте. Нужно отдать ему должное, тестирование он проводил в релизной сборке.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2011, 08:26
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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