Діаграма порівняння
Основа для порівняння | новий | malloc () |
---|---|---|
Мова | Оператор new - це особлива особливість C ++, Java і C #. | Функція malloc () є особливістю C. |
Природа | "new" - оператор. | malloc () є функцією. |
sizeof () | new не потребує розміру оператора, оскільки це достатньо для певного типу | malloc вимагає, щоб оператор sizeof знав, який розмір пам'яті він повинен виділити. |
Конструктор | Оператор new може викликати конструктор об'єкта. | malloc () не може взагалі здійснити виклик конструктору. |
Ініціалізація | Оператор new може ініціалізувати об'єкт, виділяючи йому пам'ять. | Ініціалізація пам'яті не може бути виконана в malloc. |
Перевантаження | Оператор new може бути перевантажений. | Malloc () ніколи не може бути перевантажений. |
Невдача | На відмову оператор new кидає виняток. | При відмові, malloc () повертає NULL. |
Вивіз | Виділення пам'яті новими, розмежоване за допомогою "delete". | Виділення пам'яті за допомогою malloc () звільняється за допомогою функції free (). |
Перерозподіл | Новий оператор не перерозподіляє пам'ять. | Пам'ять, що виділяється malloc (), може бути перерозподілена за допомогою realloc (). |
Виконання | Оператор new скорочує час виконання. | Malloc () вимагає більше часу для виконання. |
Визначення нового
Оператор new - це оператор виділення пам'яті, який динамічно розподіляє пам'ять. Новий оператор виділяє пам'ять у купі і повертає початкову адресу цієї пам'яті, яка присвоєна опорній змінної. Новий оператор подібний до malloc () у C. Проте компілятор C ++ сумісний з malloc (), але краще використовувати новий оператор, оскільки він має певні переваги перед malloc (). Синтаксис нового оператора такий:
тип variable_name = new type (параметр-список);
Тут "type" позначає тип даних змінної, для якої пам'ять повинна бути виділена. Слово "variable_name" - це ім'я, яке задається посиланням, що містить покажчик на пам'ять. У дужках вказано виклик конструктора. Параметр list_list являє собою список значень, які передаються конструктору для ініціалізації новоствореного об'єкта.
Новий оператор виділяє достатньо пам'яті, необхідної для об'єкта певного типу. Отже, він не вимагає оператора sizeof () і не вимагає зміни розміру пам'яті, як malloc (), що використовує realloc () для перерозподілу пам'яті. Новий оператор - конструкт; він викликає конструктор об'єкта під час декларування, який зазвичай використовується для ініціалізації об'єкта.
Ми знаємо, що новий оператор виділяє пам'ять в купі і розмір купи обмежений. Отже, якщо в купі немає пам'яті і новий оператор намагається виділити пам'ять, це призведе до збою нового оператора. Якщо новий оператор не зможе виділити пам'ять, він викине виняток, і якщо ваш код не в змозі впоратися з цим винятком, програма закінчується ненормально.
Пам'ять, виділена оператором new, може бути звільнена за допомогою оператора delete. Новий оператор скорочує час виконання, оскільки він є оператором, а не функцією.
Визначення malloc ()
Malloc () - це функція, яка використовується для виділення необхідної кількості пам'яті в купі. Метод повертає вказівник типу 'void', який далі, типу cast, щоб отримати покажчик на пам'ять зазначеного типу, і цей покажчик на пам'ять присвоюється опорній змінної. Функція malloc () подібна до нового оператора в C ++, оскільки вона використовується для динамічного розподілу пам'яті. Функція malloc () є стандартною функцією бібліотеки. Синтаксис функції malloc () така:
тип variable_name = (тип *) malloc (sizeof (type));
Тут "type" вказує тип даних змінної, для якої повинна бути виділена пам'ять. Назва змінної - ім'я опорної змінної, до якої буде призначений покажчик, який повертається malloc (). (Type *) описує тип виведення для отримання покажчика на пам'ять конкретного типу. SizeOf () описує malloc (), що вимагає розмір пам'яті.
Malloc () вимагає відправлення типу, оскільки покажчик, який повертає malloc (), має тип void, тому для присвоєння типу покажчику потрібно приведення типу. SizeOf () є обов'язковим, оскільки функція malloc () виділяє необроблену пам'ять, тому потрібно вказати функцію malloc (), яку розмір пам'яті він повинен виділити. Якщо виділеної пам'яті недостатньо, її можна змінити або перерозподілити за допомогою realloc ().
Функція malloc () виділяє пам'ять на купі. У випадку, якщо купа не має пам'яті, то функція malloc () повертає покажчик NULL. Отже, посилання перемінної, що містить покажчик, що повертається malloc (), повинна бути перевірена, перш ніж вона буде використана, в іншому випадку це може призвести до збою системи.
Пам'ять, виділена функцією malloc (), звільняється за допомогою free (). Оскільки виклик функції призводить до накладних витрат, malloc () вимагає більше часу для виконання.
Ключові відмінності між новим і malloc ()
- Новий оператор - це конструкція, що вводиться в C ++ і використовується в Java, C # і т.д. З іншого боку, malloc () - це стандартна бібліотечна функція, знайдена тільки на мові C і підтримувана C ++.
- Новий оператор виділяє достатньо пам'яті для об'єкта зазначеного типу так, він не вимагає операції калібрування. З іншого боку, функція malloc () вимагає, щоб оператор sizeof () дозволив функції знати, який розмір пам'яті він повинен виділити.
- Новий оператор може викликати конструктор об'єкта під час декларування. З іншого боку, функція malloc () не може викликати конструктор.
- Оператор 'new' може бути перевантажений, але malloc () не може.
- Якщо новий оператор не може виділити пам'ять, він викидає виняток, який повинен бути оброблений кодом, який програма припинить. З іншого боку, функція malloc () повертає покажчик NULL, якщо він не може виділити пам'ять. Якщо покажчик використовується без перевірки цього, це призведе до збою системи.
- Пам'ять, виділена за допомогою нового оператора, може бути вилучена за допомогою 'delete'. З іншого боку, пам'ять, виділена за допомогою функції malloc (), може бути звільнена за допомогою free ().
- Після того, як пам'ять виділено за допомогою нового оператора, вона не може бути змінена. З іншого боку, пам'ять, виділена за допомогою функції malloc (), може бути перерозподілена (змінена) за допомогою функції realloc ().
- Час виконання нового є меншим у порівнянні з malloc (), оскільки malloc є функцією, а new - конструкцією.
Висновок:
Функція malloc () - це старий спосіб динамічного розміщення пам'яті. Сьогодні новий оператор використовується для виділення пам'яті під час виконання, оскільки він має певні переваги перед malloc ().