Різниця між новим та malloc ()

Автор: Laura McKinney
Дата Створення: 1 Квітень 2021
Дата Оновлення: 5 Травень 2024
Anonim
Section, Week 5
Відеоролик: Section, Week 5

Зміст


Новий і malloc () використовуються для динамічного розподілу пам'яті. Хоча, new і malloc () у багатьох мінусах різні. Основна відмінність між new і malloc () полягає в тому нові є оператором, що використовується як конструкція. З іншого боку, malloc () - це стандартна функція бібліотеки, яка використовується для розподілу пам'яті під час виконання. Інші відмінності між ними розглядаються нижче на таблиці порівняння:

  1. Порівняльна діаграма
  2. Визначення
  3. Ключові відмінності
  4. Висновок

Порівняльна діаграма

Основа для порівнянняновіmalloc ()
МоваОператор new - це особливість C ++, Java та C #. Функція malloc () - особливість C.
Природа"new" - оператор.malloc () - функція.
sizeof ()Новому не потрібен оператор sizeof, як виділити достатньо пам'яті для конкретного типу malloc вимагає від оператора sizeof знати, який розмір пам'яті він повинен виділити.
Конструктор Оператор new може викликати конструктора об'єкта.malloc () взагалі не може здійснити виклик конструктору.
ІніціалізаціяОператор new може ініціалізувати об’єкт, при цьому виділяючи йому пам'ять.Ініціалізацію пам’яті не вдалося здійснити малим словом.
Перевантаження Оператор новий може бути перевантажений.Malloc () ніколи не можна перевантажувати.
НевдачаПри відмові оператор new кидає виняток.При відмові malloc () повертає NULL.
РозміщенняРозподіл пам'яті за новим, розміщеним за допомогою "delete".Розподіл пам'яті malloc () розподіляється за допомогою функції free ().
ПерерозподілНовий оператор не перерозподіляє пам'ять.Пам'ять, виділену malloc (), можна перерозподілити за допомогою realloc ().
ВиконанняОператор новий скорочує час виконання.Malloc () вимагає більше часу для виконання.


Визначення нового

Оператор нові це оператор розподілу пам'яті, який динамічно розподіляє пам'ять. Новий оператор виділяє пам'ять в купі і повертає початкову адресу тієї пам'яті, яка присвоєна контрольній змінній. Новий оператор схожий на malloc () у C. Однак компілятор C ++ сумісний з malloc (), але найкраще використовувати новий оператор, оскільки він має певні переваги перед malloc (). Синтаксис нового оператора такий:

тип змінної_мення = новий тип (параметр_ список);

Тут "type" позначає тип даних змінної, для якої має бути виділена пам'ять. Слово "змінна_ ім'я" - це ім'я, яке посилається на довідкову змінну, яка містить покажчик на пам'ять. Тут дужки вказують виклик конструктора. Параметр_list - це список значень, які передаються конструктору для ініціалізації щойно побудованого об'єкта.

Новий оператор виділяє достатню кількість пам'яті, необхідної для об'єкта певного типу. Отже, йому не потрібен оператор sizeof (), а також не потрібно змінювати розмір пам'яті, наприклад malloc (), який використовує realloc () для перерозподілу пам'яті. Новий оператор - це конструкція; він викликає конструктор об'єкта, тоді як оголошення, яке зазвичай використовується для ініціалізації об'єкта.


Ми знаємо, що новий оператор виділяє пам'ять в купі, а розмір купи обмежений. Отже, якщо купа не має пам’яті і новий оператор намагається виділити пам'ять, це призведе до виходу з ладу нового оператора. Якщо новий оператор не зможе виділити пам'ять, він видасть виняток, і якщо ваш код не в змозі обробити цей виняток, програма припиняється аномально.

Пам'ять, виділена оператором new, може бути звільнена за допомогою оператора видалення. Новий оператор скорочує час виконання, оскільки це оператор, а не функція.

Визначення malloc ()

The malloc () це функція, яка використовується для розподілу потрібного обсягу пам'яті на купі. Метод повертає вказівник типу "void", який надалі введіть, щоб отримати покажчик на пам'ять визначеного типу, і цей покажчик на пам'ять присвоюється посилальній змінній. Функція malloc () подібна до нового оператора в C ++, оскільки використовується для динамічного розподілу пам'яті. Malloc () - це стандартна функція бібліотеки. Синтаксис функції malloc () такий:

тип змінної_мення = (тип *) malloc (sizeof (тип));

Тут "type" вказує тип даних змінної, для якої потрібно виділити пам'ять. Ім'я змінної_ ім'я посилальної змінної, якій буде призначений покажчик, повернутий malloc (). (Type *) описує кастинг типу для отримання вказівника на пам'ять конкретного типу. Sizeof () описує malloc (), що потрібний розмір пам'яті.

Malloc () вимагає кастингу типу, тому що вказівник, повернутий malloc (), має недійсний тип, тому для призначення типу вказівника потрібне кастинг типу. Sizeof () необхідний, оскільки функція malloc () виділяє необроблену пам'ять, отже, потрібно сказати функції malloc (), який розмір пам'яті він повинен виділити. Якщо виділеної пам’яті недостатньо, її можна змінити розміром або перерозподілити за допомогою realloc ().

Функція malloc () виділяє пам'ять на купі. У тому випадку, коли купа залишилася в пам'яті, функція malloc () повертає вказівник NULL. Отже, еталонну змінну, що містить покажчик, повернутий malloc (), слід перевірити перед її використанням, інакше це може призвести до краху системи.

Пам'ять, виділена функцією malloc (), розміщується за допомогою free (). Оскільки виклик функції призводить до накладних витрат, malloc () вимагає більше часу для виконання.

  1. Новий оператор - це конструкція, введена в C ++ і використовується в Java, C # тощо. З іншого боку, malloc () - це стандартна функція бібліотеки, що зустрічається лише на мові C та підтримується C ++.
  2. Новий оператор виділяє достатньо пам'яті для об'єкта вказаного типу, тому він не потребує розміщення оператора. З іншого боку, функція malloc () вимагає оператора sizeof (), щоб функція знала, який розмір пам'яті вона має виділити.
  3. Новий оператор може зателефонувати конструктору об'єкта під час декларування. З іншого боку, функція malloc () не може викликати конструктор.
  4. Оператор "new" може бути перевантажений, але malloc () не міг.
  5. Якщо новий оператор не зможе виділити пам'ять, він видає виняток, який повинен оброблятися кодом, інакше програма припинить роботу. З іншого боку, функція malloc () повертає покажчик NULL, якщо він не може виділити пам'ять. Якщо вказівник використовується без перевірки цього, це призведе до збоїв у роботі системи.
  6. Пам'ять, виділена за допомогою нового оператора, може бути розміщена за допомогою "видалити". З іншого боку, пам'ять, виділену за допомогою функції malloc (), може бути розміщена за допомогою free ().
  7. Щойно пам'ять розподіляється за допомогою нового оператора, вона не може бути змінена в будь-якому випадку. З іншого боку, пам'ять, виділену за допомогою функції malloc (), можна перерозподілити (змінити) за допомогою функції realloc ().
  8. Час виконання нового менший порівняно з malloc (), оскільки malloc - це функція, а new - конструкція.

Висновок:

Функція malloc () - це старий спосіб динамічного розподілу пам'яті. В даний час новий оператор використовується для розподілу пам'яті під час виконання, оскільки він має певні переваги перед malloc ().