#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 и медленнее, то не намного.
Комментариев нет:
Отправить комментарий