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

267
28 марта 2018, 06:03

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

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

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

Answer 1

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

Answer 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 и медленнее, то не намного.

READ ALSO
Обновление кадра, скорость и время (Vulkan + WinApi)

Обновление кадра, скорость и время (Vulkan + WinApi)

ЗдравствуйтеПытаюсь разобраться в Vulkan, но вопрос скорее даже не по нему

243
Не читается слово из заданного файла

Не читается слово из заданного файла

Не читает слова из файла "inputtxt" (24 строчка)

247
Мультипликативное хеширование

Мультипликативное хеширование

Занимался созданием хеш-таблицы, где необходимо было использовать мультипликативное хешированиеПодскажите пожалуйста правильно ли я его...

246
Упростить написание кода макросом

Упростить написание кода макросом

Имеется множество примерно таких методов:

256