С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
1017 / 1905 / 178
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
1

Is new faster than malloc() ?

12.03.2022, 15:30. Показов 785. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Difference between new and malloc() in C++
https://www.includehelp.com/cp... alloc.aspx

new is faster than malloc() because an operator is always faster than a function.
это действительно так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2022, 15:30
Ответы с готовыми решениями:

В чем разница между malloc() и (char *)malloc()
Прошу помочь разобраться: не могу понять в чем разница междуs=malloc(sizeof(char)); иs=(char...

Faster Light
Подскажите куда засела эта программа Faster Light запустил кклеанер её нету. . как вообще её...

Как удалить faster light с Windows XP?
Привет всем форумчанам! Пожалуйста, кто сталкивался, подскажите как удалить faster light ? В инете...

Нейронные сети . Алгоритм faster r-cnn
У меня есть выборка train-архив с jpg и xml Как мне подключить в Colab ее для обработки? Вот...

Вывод лосса на валидации с pytorch, Faster R-CNN
Здравствуйте! Есть такая задача: взять предобученную модель-детектор и обучить её на другом...

9
фрилансер
5848 / 5379 / 1103
Регистрация: 11.10.2019
Сообщений: 14,380
12.03.2022, 15:53 2
оператор - это тоже функция

по логике, new чуточку медленнее malloc, так как вызывает конструктор
0
Эксперт функциональных языков программированияЭксперт С++
4175 / 2012 / 961
Регистрация: 01.06.2021
Сообщений: 7,125
Записей в блоге: 7
12.03.2022, 16:01 3
vantfiles, использование malloc в С++ противоречит философии этого языка. Рекомендую использовать в С++ только new и не заморачиваться. А если вы гоняетесь за наносекундами, то пишите на ассемблере.
1
1017 / 1905 / 178
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
12.03.2022, 16:10  [ТС] 4
Цитата Сообщение от Алексей1153 Посмотреть сообщение
по логике, new чуточку медленнее malloc, так как вызывает конструктор
Мне нужно работать с сырой памятью, конструктор не вызывается.
Видимо так и придется тесты самому писать, вопрос специфичный, да и реализации компиляторов разные.

Цитата Сообщение от Royal_X Посмотреть сообщение
философии этого языка
Философия языка - это абстракция. А у меня вопрос конкретный.

Цитата Сообщение от Royal_X Посмотреть сообщение
гоняетесь за наносекундами, то пишите на ассемблере
Предлагаете менеджер памяти самому реализовать, вместо готового?
1
Неэпический
18109 / 10696 / 2062
Регистрация: 27.09.2012
Сообщений: 26,939
Записей в блоге: 1
12.03.2022, 16:15 5
Цитата Сообщение от vantfiles Посмотреть сообщение
это действительно так?
Нет.

new-expression внутри вызывает operator new.
Как реализован operator new - не прописывается.
Зачастую, он реализуется с помощью malloc.
Например, вот один из операторов в gcc, который реализован через malloc.
2
1017 / 1905 / 178
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
12.03.2022, 16:46  [ТС] 6
Цитата Сообщение от Croessmah Посмотреть сообщение
Зачастую, он реализуется с помощью malloc.
Вот и мне так казалось, просто лезть в исходники тяжко...

Тест, кстати, поспел.

malloc + free: 3315062900
new[] + delete[]: 3518092100

Для кого-то может быть и не критично, а у меня приложение будет сутками крутиться - набежит.
Для старта достаточно, потом наверное свой аллокатор наваяю.

Сам тест:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void bench()
{
    char* p;
    int N = 10000000;
 
    auto start = std::chrono::steady_clock::now();
    for( int32_t i = 0; i < N; i++ ){
         p = (char*)malloc( 1024 );
         free( p );
    }
    auto end = std::chrono::steady_clock::now();
    
    std::cout << "malloc + free: " << (end - start).count() << std::endl;
    
    start = std::chrono::steady_clock::now();
    for( int32_t i = 0; i < N; i++ ){
         p = new char [ 1024 ];
         delete[] p;
    }
    end = std::chrono::steady_clock::now();
 
    std::cout << "new[] + delete[]: " << (end - start).count() << std::endl;
}
0
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
12.03.2022, 17:12 7
Цитата Сообщение от vantfiles Посмотреть сообщение
new is faster than malloc() because an operator is always faster than a function.
это действительно так?
в контексте данного утверждение под new подразумевается operator new

operator new - это и есть функция.
очевидно жеж, что высказывание - лютый бред.

что касается твоей методички:
выбрось нахер это говно, и читай нормальное чтиво.
1
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
13.03.2022, 13:36 8
Цитата Сообщение от vantfiles Посмотреть сообщение
Для кого-то может быть и не критично, а у меня приложение будет сутками крутиться - набежит.
Преждевременная эяку оптимизация - корень всех бед.

Что же такое там сутками будет крутиться, что:
1) Разница в четвертом знаке будет заметна
2) Выделение/освобождение памяти - узкое место?

В любом случае переход между new и malloc не спасет, придется писать свой аллокатор. Да и то, что выделение памяти - узкое место говорит о том, что вы что-то делаете не так.
0
1017 / 1905 / 178
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
13.03.2022, 15:08  [ТС] 9
Цитата Сообщение от avgoor Посмотреть сообщение
Разница в четвертом знаке будет заметна
6% - не четвертый знак.
Цитата Сообщение от avgoor Посмотреть сообщение
Преждевременная эяку оптимизация - корень всех бед.
Согласен, а кто занимается оптимизацией? Или выбор из двух вариантов - это оно и есть?
Цитата Сообщение от avgoor Посмотреть сообщение
придется писать свой аллокатор
Я об этом упомянул, но кто ж читает...
0
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
13.03.2022, 15:16 10
vantfiles, Основной посыл: так делать не надо. Любой системный вызов - это дорого. Если этот выбор влияет на производительность - надо менять архитектуру.
Цитата Сообщение от vantfiles Посмотреть сообщение
6% - не четвертый знак.
3 и 5 при беглом просмотре перепутал.

Добавлено через 54 секунды
Цитата Сообщение от vantfiles Посмотреть сообщение
6%
6% от операций выделения памяти, а не всего.
0
13.03.2022, 15:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2022, 15:16
Помогаю со студенческими работами здесь

Save Time and Get Faster Result Order YourBest Essay
In such cases you often ask yourself “Who can write my essay for me?”, and ensure that the...

Malloc си
распределить память для массива из 80 символов с помощью функции malloc. Прочитать в эту память...

new vs malloc
Чем new безопаснее(или лучше?) malloc?

new, malloc,
Добрый день. При роботе с дин. памяттю в конец выделяемой памяти добавляеться какойто бред, чтото...

Malloc vs new
Здравствуйте. Вникаю в ручное управление памятью. Абзац из книги &quot;C++ для профессионалов&quot; не...

new на malloc
Измените выделение памяти на C - malloc,и почему у меня не открывает текстовый файл? #include...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru