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

Аутор: Laura McKinney
Датум Стварања: 1 Април 2021
Ажурирати Датум: 5 Може 2024
Anonim
Section, Week 5
Видео: Section, Week 5

Садржај


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

  1. Упоредни графикон
  2. Дефиниција
  3. Кључне разлике
  4. Закључак

Упоредни графикон

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


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

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

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

Овде "тип" означава тип података променљиве за коју се меморија мора доделити. Реч „променљиво име“ је име које се даје референтној променљивој која држи показивач на меморију. Заграде у овом случају специфицирају позивање конструктора. Списак параметара је листа вредности које се прослеђују конструктору за иницијализацију новоизграђеног објекта.

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


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

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

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

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

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

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

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

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

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

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

Закључак:

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