Маллок проти Нью
Одне з найпоширеніших питань співбесіди при наймі програміста на комп’ютер - це те, щоб заявник / програміст-комп’ютер пояснив відмінності між malloc та new. І malloc, і new існують у царині комп'ютерної мови і часто використовуються комп'ютерними програмістами для динамічного розподілу пам'яті.
Основна відмінність між ними полягає в тому, що malloc існує на мові С, тоді як новий є специфічною особливістю мови C ++. Malloc - це також функція (яка для програмістів вимагає певного часу для виконання), а new - програма оператора (яка скорочує час виконання). Це користь від нового оператора, оскільки програмісти, які виконують програмування в режимі реального часу, мають вибрати найбільш швидкий метод використання.
Оператор new є безпечним для типу, на відміну від функції malloc.
Функція malloc - це функція бібліотеки для мови С. Все, що він робить - це виділити пам'ять і повернути на неї вказівник. З іншого боку, оператор new - це конструкція на мовному рівні, і його завдання полягає у створенні об'єкта шляхом виділення пам'яті та виклику відповідних конструкторів. Ще одна відмінність функції malloc від оператора new полягає в тому, що malloc вимагає набору тексту під час оголошення, тоді як перший не робить. Також функція malloc використовує слово "безкоштовно" для очищення пам'яті, тоді як "delete" використовується для оператора new для подібних цілей.
Вони також мають різні способи боротьби з невдачею та виснаженням пам'яті. Якщо функція malloc виходить з ладу, вона повертається за допомогою вказівника NULL. Оператор new ніколи не повертає вказівник NULL, але вказує на помилку, передаючи замість цього виключення. Це перевага для нового оператора, оскільки програмісту не потрібно перевіряти повернутий вказівник кожен раз, коли він викликає новий, аніж комп'ютерний програміст не пропускатиме такий виняток.
Функція malloc не конструює об'єкт (званий конструктором об'єкта), але оператор new робить. Ще одна перевага нового полягає в тому, що оператор може перевантажуватися, поки функція malloc не може. Оператор new вимагає виділити певну кількість об'єктів, тоді як функція malloc вимагає вказати загальну кількість байтів, які потрібно виділити.
Пам'ять можна також змінити розмір або перерозподілити за допомогою функції malloc за допомогою realloc. Однак оператор new не може виконувати цю функцію і вважає її одним з головних недоліків оператора. Ще одна перевага функції malloc над оператором new полягає в тому, що malloc може швидко розширити об'єм пам'яті. Це все ще використовується malloc та realloc. Виконуючи ту саму ситуацію мовою C ++, програміст повинен створити новий фрагмент пам'яті з оператором new. Нова пам'ять повинна мати змінений розмір і буде скопійована над даними з вихідного буфера. Оригінальний буфер повинен бути видалений після копії. Це може бути повільним процесом для програміста.
Оператор new має важелі над функцією malloc, повертаючи точний тип даних, тоді як функція повертає void *. Функція malloc також не може бути перевантажена порівняно з новим оператором, де можлива перевантаження. Ще одна особливість нового оператора полягає в тому, що менше шансів помилитися з оператором порівняно з функцією malloc. Це вважається плюсом для програмістів, особливо якщо вони пишуть багато кодів або працюють над кодом за жорстким графіком. Функцію malloc та free можна використовувати в C ++, але її не можна використовувати безпосередньо. Доцільно використовувати нове та видалити замість цього.
Підсумок:
1. Malloc - це функція, а new - оператор.
2. New - специфічна особливість мови C ++, тоді як malloc використовується в мові C.
3. Оператор new випливає із "delete", тоді як функція malloc переходить із "free".
4. Функція malloc - це функція бібліотеки для мови C, тоді як оператор new - це конструкція на мовному рівні з мови C ++.