Рецоммендед, 2020

Избор Уредника

Разлика између новог и маллоц ()

Оба и нова и маллоц () се користе за динамичко додељивање меморије. Иако су нови и маллоц () различити у многим контекстима. Основна разлика између новог и маллоц () је да је нови оператор, који се користи као конструкт. С друге стране, маллоц () је стандардна библиотечка функција, која се користи за алокацију меморије током извршавања. Остале разлике између њих су размотрене у даљем тексту у табели поређења:

Цомпарисон цхарт

Основа за поређењеневмаллоц ()
ЈезикОператор нев је специфична карактеристика Ц ++, Јава и Ц #.Функција маллоц () је карактеристика Ц.
Природа"нев" је оператор.маллоц () је функција.
величина( )нев не треба сизеоф оператор асит додељује довољно меморије за одређени типмаллоц захтева да оператор сизеоф зна колико меморије мора да додели.
КонструкторОператор нев може позвати конструктора објекта.маллоц () уопште не може да позове конструктора.
ИнитиализатионОператор нев може иницијализирати објект док му додјељује меморију.Иницијализација меморије се не може извршити у маллоц-у.
ОверлоадингОператор нев може бити преоптерећен.Маллоц () никада не може бити преоптерећен.
НеуспехКод неуспјеха, оператор нев баца изузетак.У случају грешке, маллоц () враћа НУЛЛ.
ДеаллоцатионДодељивање меморије новим, ослобођено коришћењем "брисање".Додељивање меморије од стране маллоц () се ослобађа коришћењем функције фрее ().
РеаллоцатионНови оператор не додељује меморију.Меморија коју је доделио маллоц () може се прерасподелити коришћењем реаллоц ().
ИзвршењеОператор нев смањује време извршења.Маллоц () захтева више времена за извршење.

Дефиниција новог

Оператор нев је оператор доделе меморије који динамички алоцира меморију. Нови оператор додјељује меморију у хрпи и враћа почетну адресу те меморије која је додијељена референтној варијабли. Нови оператор је сличан маллоц () у Ц. Међутим, Ц ++ компајлер је компатибилан са маллоц () али је најбоље користити нови оператор јер има одређене предности у односу на маллоц (). Синтакса новог оператора је следећа:

 упишите вариабле_наме = нев типе (параметер_лист); 

Овде, "тип" означава тип података променљиве за коју се меморија мора доделити. Ријеч “вариабле_наме” је име дато референтној варијабли која држи показивач у меморији. У загради се овде наводи позив конструктора. Параметар_лист је листа вриједности које се просљеђују конструктору за иницијализацију новоизграђеног објекта.

Нови оператор додељује довољно меморије која је потребна за објекат одређеног типа. Према томе, не захтева оператор сизеоф () нити је потребно да се промени величина меморије као што је маллоц () који користи реаллоц () за премештање меморије. Нови оператор је конструкт; он позива конструктора објекта док се декларација обично користи за иницијализацију објекта.

Знамо да нови оператор додељује меморију у гомили и величина гомиле је ограничена. Дакле, ако је гомила без меморије и нови оператор покушава да додели меморију, то ће довести до квара новог оператера. Ако нови оператор не успе да додели меморију, он ће бацити изузетак, и ако ваш код није у стању да обради тај изузетак, програм се ненормално прекида.

Меморија додељена од стране оператера нова се може ослободити помоћу оператора брисања. Нови оператер прекида време извршавања јер је оператер, а не функција.

Дефиниција маллоц ()

Маллоц () је функција која се користи за алокацију тражене количине меморије на гомили. Метод враћа показивач типа 'воид' који је даље, тип цаст за добијање показивача на меморију одређеног типа и овај показивач на меморију је додијељен референтној варијабли. Функција маллоц () је слична новом оператору у Ц ++-у, јер се користи за динамичко додељивање меморије. Маллоц () је стандардна библиотечка функција. Синтакса функције маллоц () је следећа:

 тип вариабле_наме = (тип *) маллоц (сизеоф (типе)); 

Овде, "тип" означава тип података променљиве за коју се додељује меморија. Име променљиве име је референтне променљиве којој ће бити додељен показивач враћен од стране маллоц (). Тип (тип *) описује кастинг типа да би се добио показивач на меморију у одређеном типу. СизеОф () описује маллоц (), што је потребна величина меморије.

Маллоц () захтева цастинг типа зато што је показивач враћен од стране маллоц () типа воид, тако да, да би додели тип показивачу, захтева се цастинг типа. СизеОф () је обавезан јер функција маллоц () додељује сирову меморију, стога је потребно да каже функцију маллоц () која величина меморије мора да додели. Ако додељена меморија није довољна, она се може променити или прерасподелити коришћењем реаллоц ().

Функција маллоц () додељује меморију на гомили. У случају да је гомила нестала меморија, функција маллоц () враћа НУЛЛ показивач. Дакле, референтна варијабла која садржи показивач враћена од стране маллоц (), треба да се провери пре него што се користи, иначе може довести до пада система.

Меморија додељена функцијом маллоц () се ослобађа употребом фрее (). Како позив функције доводи до оптерећења, маллоц () захтијева више времена за извршење.

Кључне разлике између новог и маллоц ()

  1. Нови оператор је конструкт који је уведен у Ц ++ и користи се у Јави, Ц #, итд. С друге стране, маллоц () је стандардна библиотечка функција која се налази само на Ц језику и коју подржава Ц ++.
  2. Нови оператор додељује довољно меморије за објекат одређеног типа, тако да не захтева оператора величине. С друге стране, функција маллоц () захтијева оператор сизеоф () да омогући функцији да зна која величина меморије мора додијелити.
  3. Нови оператор може назвати конструктора објекта док је декларисан. С друге стране, функција маллоц () не може позвати конструктора.
  4. Оператор 'нев' може бити преоптерећен, али маллоц () не може.
  5. Ако нови оператор не успе да додели меморију, он баца изузетак који мора да се обради кодом који ће програм прекинути. С друге стране, функција маллоц () враћа НУЛЛ показивач ако не додијели меморију. Ако се показивач користи без провере, то ће довести до пада система.
  6. Меморија која је додељена новим оператором може се уклонити коришћењем 'делете'. С друге стране, меморија додељена коришћењем функције маллоц () може бити ослобођена коришћењем фрее ().
  7. Када се меморија додели помоћу новог оператера, она се не може променити. С друге стране, меморија додељена помоћу функције маллоц () може се прерасподелити (променити) коришћењем функције реаллоц ().
  8. Време извршавања новог је мање у поређењу са маллоц () зато што је маллоц функција и нова је конструкт.

Закључак:

Функција маллоц () је стари начин да динамички доделите меморију. Данас се нови оператор користи за алокацију меморије у току рада, јер има одређене предности у односу на маллоц ().

Top