Страницы

Поиск по вопросам

воскресенье, 2 февраля 2020 г.

Есть ли разница в скорости работы malloc и new

#cpp


Я привык для массивов и структур использовать malloc, calloc, realloc, free, а для
классов new и delete.

Если смотреть с точки производительности, что работает быстрее? Ведь если подумать,
то new и delete тоже вызывают ma/ca/re/alloc и free?


  Вопрос не связан с выделением памяти c/c++. В вопросе явно говорится о скорости
работы, но никак не о способе выделения памяти.

    


Ответы

Ответ 1



По стандарту new бросает исключения (если это они не отключены глобально и если это не специальная версия без исключений), а значит потенциально медленнее. На практике вы вряд ли заметите разницу, использование malloc вместо new - классическая преждевременная оптимизация. В любом случае стандартный malloc - тоже обычно не самое быстрое решение (есть TCmalloc, например), а реальное падение производительности на выделении памяти обычно означает неудачную архитектуру. Кроме того, operator new можно переопределить глобально через тот же malloc или другим способом.

Ответ 2



Так напишите простенький бенчмарк: auto start = std::chrono::steady_clock::now(); for (int 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 (int 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; На моей машине выдаёт что-то типа malloc + free: 442622446 new[] + delete[]: 468322639 То есть, если new и медленнее, то не намного.

Комментариев нет:

Отправить комментарий