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

234
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, но вопрос скорее даже не по нему

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

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

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

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

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

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

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

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

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

227