Маллок против Нью
Один из самых распространенных вопросов при приеме на работу программиста для кандидата / программиста - объяснить разницу между malloc и new. Malloc и new существуют в области компьютерного языка и часто используются программистами для динамического распределения памяти.
Основное различие между ними состоит в том, что malloc существует в языке C, в то время как new является специфической особенностью языка C ++. Malloc также является функцией (которая для программистов требует некоторого времени для выполнения), в то время как new является программой-оператором (которая сокращает время выполнения). Это преимущество нового оператора, потому что программистам, занимающимся программированием в режиме реального времени, необходимо выбрать самый быстрый способ использования.
Оператор new является типобезопасным в отличие от функции malloc.
Функция malloc - это библиотечная функция для языка Си. Все, что он делает, это выделяет память и возвращает указатель на нее. С другой стороны, оператор new является конструкцией уровня языка, и его работа заключается в создании экземпляра объекта путем выделения памяти и вызова соответствующих конструкторов. Другое отличие функции malloc от оператора new заключается в том, что malloc требует приведения типов во время объявления, тогда как первый не требует. Кроме того, функция malloc использует слово «free» для очистки памяти, в то время как «delete» используется в операторе new для аналогичной цели..
У этих двух также есть различные способы иметь дело с отказом и исчерпанием памяти. Если функция malloc завершается с ошибкой, она возвращается с указателем NULL. Оператор new никогда не возвращает указатель NULL, но указывает на ошибку, генерируя исключение. Это преимущество для оператора new, поскольку программисту не нужно проверять возвращаемый указатель каждый раз, когда он вызывает new, и программист не пропустит такое исключение..
Функция malloc не создает объект (называемый конструктором объекта), но оператор new создает. Еще одним преимуществом new является то, что оператор может быть перегружен, а функция malloc - нет. Оператор new требует определенного количества объектов для выделения, в то время как функция malloc требует указания общего количества байтов для выделения.
Память также можно изменить или перераспределить с помощью функции malloc с помощью realloc. Однако оператор new не может выполнять эту функцию и считает ее одним из основных недостатков оператора. Другое преимущество функции malloc перед оператором new заключается в том, что malloc может быстро увеличить объем памяти. Это все еще использует malloc и realloc. При выполнении той же ситуации на языке C ++ программист должен создать новый фрагмент памяти с оператором new. Новая память должна иметь измененный размер и будет скопирована поверх данных из исходного буфера. Исходный буфер должен быть удален после копирования. Это может быть медленным процессом для программиста.
Оператор new имеет преимущество над функцией malloc, возвращая точный тип данных, а функция возвращает void *. Функция malloc также не может быть перегружена по сравнению с оператором new, где возможна перегрузка. Еще одна особенность оператора - меньше шансов ошибиться с оператором по сравнению с функцией malloc. Это считается плюсом для программистов, особенно если они пишут много кодов или работают над кодом в сжатые сроки. Функция malloc и free может использоваться в C ++, но ее нельзя использовать напрямую. Желательно использовать новое и удалить вместо.
Резюме:
1. Malloc - функция, а new - оператор.
2. Новая особенность языка C ++, в то время как malloc используется в языке C.
3. Оператор new следует с «delete», а функция malloc идет с «free».
4. Функция malloc является библиотечной функцией для языка C, а оператор new является конструкцией уровня языка из языка C ++..