Разлика между new и malloc ()

Автор: Laura McKinney
Дата На Създаване: 1 Април 2021
Дата На Актуализиране: 5 Може 2024
Anonim
new vs malloc: в чем разница
Видео: new vs malloc: в чем разница

Съдържание


И двете, и malloc () се използват за динамично разпределение на паметта. Макар че, new и malloc () са различни в много минуси. Основната разлика между new и malloc () е тази нов е операторът, използван като конструкция. От друга страна изчистване () е стандартна библиотечна функция, използвана за разпределяне на памет по време на изпълнение. Останалите разлики между тях са разгледани по-долу в сравнителната диаграма:

  1. Сравнителна диаграма
  2. дефиниция
  3. Ключови разлики
  4. заключение

Сравнителна диаграма

Основа за сравнениеновmalloc ()
езикОператорът new е специфична характеристика на C ++, Java и C #. Функцията malloc () е характеристика на C.
природа"new" е оператор.malloc () е функция.
размер на( )нов не се нуждае от оператора sizeof, за да отдели достатъчно памет за конкретен тип malloc изисква оператора sizeof да знае какъв размер на паметта трябва да разпредели.
конструктор Оператор нов може да се обади на конструктора на обект.malloc () изобщо не може да се обади на конструктор.
ИнициализацияОператорът new може да инициализира обект, докато му разпределя памет.Инициализирането на паметта не може да се извърши накратко.
Претоварването Оператор нов може да бъде претоварен.Malloc () никога не може да бъде претоварен.
неуспехПри отказ операторът new хвърля изключение.При неуспех malloc () връща NULL.
DeallocationРазпределението на паметта по нов, разпределен чрез използване на „изтриване“.Разпределението на паметта по malloc () се разпределя с помощта на безплатна () функция.
ПреразпределениеНовият оператор не преразпределя памет.Паметта, разпределена от malloc (), може да бъде преразпределена с помощта на realloc ().
ЕкзекуцияНовият оператор съкращава времето за изпълнение.Malloc () изисква повече време за изпълнение.


Определение за ново

Операторът нов е оператор за разпределение на памет, който разпределя памет динамично. Новият оператор разпределя памет в грамадата и връща началния адрес на тази памет, която е присвоена на референтна променлива. Новият оператор е подобен на malloc () в C. Въпреки това, компилаторът на C ++ е съвместим с malloc (), но най-добре е да се използва нов оператор, тъй като има определени предимства пред malloc (). Синтаксисът на новия оператор е следният:

въведете променливото име = нов тип (параметър_ списък);

Тук "type" обозначава типа данни на променливата, за която трябва да бъде разпределена паметта. Думата "име на променлива" е името, дадено на референтната променлива, която държи показалеца към паметта. Тук скобите определят извикването на конструктора. Параметр_list е списъкът на стойностите, които се предават на конструктора за инициализиране на новопостроения обект.

Новият оператор разпределя достатъчно памет, необходима за обект от определен тип. Следователно, той не изисква оператор sizeof (), нито изисква промяна на размера на паметта като malloc (), която използва realloc (), за да пренасочи паметта. Новият оператор е конструкция; той извиква конструктора на обект, докато декларацията, която обикновено се използва за инициализиране на обекта.


Знаем, че новият оператор разпределя паметта в грамадата и размерът на купчината е ограничен. Така че, ако купчината е без памет и нов оператор се опита да разпредели паметта, това ще доведе до отказ на новия оператор. Ако новият оператор не успее да разпредели паметта, той ще хвърли изключение и ако кодът ви не може да се справи с това изключение, програмата се прекратява необичайно.

Паметта, отредена от оператора нов, може да бъде освободена с помощта на оператора за изтриване. Новият оператор прекъсва времето за изпълнение, тъй като е оператор, а не функция.

Определение за malloc ()

Най- изчистване () е функция, която се използва за разпределяне на исканото количество памет на грамадата. Методът връща показалеца от тип 'void', който е допълнително, въведете cast, за да получите указател към памет от определен тип и този указател към паметта е присвоен на референтна променлива. Функцията 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. Операторът „нов“ може да бъде претоварен, но malloc () не може.
  5. Ако новият оператор не успее да разпредели паметта, той хвърля изключение, което трябва да бъде обработено от кода, който програмата ще прекрати. От друга страна, функцията malloc () връща NULL показалец, ако не успее да разпредели памет. Ако показалецът се използва без проверка на това, това ще доведе до срив на системата.
  6. Паметта, разпределена с помощта на нов оператор, може да бъде раздадена чрез „изтриване“. От друга страна, паметта, разпределена с функцията malloc (), може да бъде раздадена, като се използва free ().
  7. След като паметта е разпределена с нов оператор, тя така или иначе не може да бъде променена. От друга страна, паметта, разпределена с помощта на функцията malloc (), може да бъде преразпределена (преоразмерена) с помощта на функция realloc ().
  8. Времето за изпълнение на new е по-малко в сравнение с malloc (), защото malloc е функция, а new е конструкция.

Заключение:

Функцията malloc () е старият начин за динамично разпределение на паметта. В наши дни новият оператор се използва за разпределяне на паметта по време на изпълнение, тъй като има определени предимства пред malloc ().