Препоръчано, 2022

Избор На Редактора

Разлика между нови и malloc ()

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

Сравнителна таблица

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

Дефиниция на нова

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

 напишете variable_name = new type (параметър-списък); 

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

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

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

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

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

Malloc () е функция, която се използва за разпределяне на исканото количество памет в купчината. Методът връща показалеца от тип 'void', който е по-нататък, тип cast, за да получи указател към памет от определен тип и този указател към паметта е присвоен на референтна променлива. Функцията malloc () е подобна на новия оператор в C ++, тъй като се използва за динамично разпределение на паметта. Malloc () е стандартна библиотечна функция. Синтаксисът на функцията malloc () е както следва:

 тип variable_name = (тип *) malloc (sizeof (type)); 

Тук “type” указва типа данни на променливата, за която трябва да бъде разпределена памет. Името на променливата е името на референтната променлива, към която ще бъде присвоен показалецът, върнат от malloc (). (Тип *) описва типа кастинг за получаване на показалец към паметта в определен тип. Sizeof () описва malloc (), какъв размер на паметта е необходим.

Malloc () изисква кастинг, тъй като указателят, върнат от malloc (), е с тип void, така че за да се присвои тип на показалеца, е необходимо въвеждане на тип. 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 ().

Top