Я привык для массивов и структур использовать malloc
, calloc
, realloc
, free
, но для классов использую new
и delete
.
Если смотреть с точки производительности, что из работает быстрее? Ведь если подумать, то new
, delete
тоже вызывают ma/ca/re/alloc
и free
?
Вопрос не связан с выделением памяти c/c++ в вопросе явно говорится о скорости работы, но никак не о способе выделения памяти.
По стандарту new
бросает исключения (если это они не отключены глобально и если это не специальная версия без исключений), а значит потенциально медленнее. На практике вы вряд ли заметите разницу, использование malloc
вместо new
- классическая преждевременная оптимизация. В любом случае стандартный malloc
- тоже обычно не самое быстрое решение (есть TCmalloc, например), а реальное падение производительности на выделении памяти обычно означает неудачную архитектуру. Кроме того, operator new
можно переопределить глобально через тот же malloc
или другим способом.
Так напишите простенький бенчмарк:
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
и медленнее, то не намного.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
ЗдравствуйтеПытаюсь разобраться в Vulkan, но вопрос скорее даже не по нему
Занимался созданием хеш-таблицы, где необходимо было использовать мультипликативное хешированиеПодскажите пожалуйста правильно ли я его...