Rekomenduojama, 2024

Redaktoriaus Pasirinkimas

Skirtumas tarp naujo ir malloc ()

Naujasis ir malloc () abu naudojami dinamiškai atminties paskirstymui. Nors naujas ir malloc () yra skirtingi daugeliu atvejų. Pagrindinis skirtumas tarp naujo ir malloc () yra tai, kad naujasis yra operatorius, naudojamas kaip statinys. Kita vertus, malloc () yra standartinė bibliotekos funkcija, naudojama atminties paskirstymui vykdymo metu. Kiti skirtumai tarp jų aptariami palyginimo lentelėje:

Palyginimo diagrama

Palyginimo pagrindasnaujasmalloc ()
KalbaNaujasis operatorius yra specifinis C ++, Java ir C # bruožas.Funkcija malloc () yra C. savybė.
Gamta„naujas“ yra operatorius.malloc () yra funkcija.
dydis( )naujai nereikia dydžio operatoriaus, skirto pakankamai atminties tam tikram tipui„malloc“ reikalauja, kad operatorius žinotų, kokio dydžio atminties dydį jis turi paskirstyti.
KonstruktoriusNaujas operatorius gali skambinti objekto konstruktoriui.malloc () visai negali skambinti į konstruktorių.
InicijavimasNaujasis operatorius gali inicijuoti objektą, o jam priskirti atmintį.Atminties inicijavimas negali būti atliktas malloc.
PerkrovimasNaujas operatorius gali būti perkrautas.Malloc () niekada negali būti perkrautas.
NesėkmėGedimo atveju operatorius išleidžia išimtį.Gedimo atveju malloc () grąžina NULL.
Prekybos vietaAtminties priskyrimas nauju, paskirstytu naudojant „ištrinti“.„Malloc“ () atminties priskyrimas paskirstomas naudojant nemokamą () funkciją.
PerskirstymasNaujasis operatorius neperduoda atminties.Malloc () priskirtą atmintį galima perskirstyti naudojant realloc ().
VykdymasOperatorius vėl sumažina vykdymo laiką.Malloc () reikalauja daugiau laiko vykdymui.

Naujo apibrėžimas

Naujas operatorius yra atminties paskirstymo operatorius, kuris dinamiškai paskirsto atmintį. Naujasis operatorius kaupia atmintį krūvoje ir grąžina tos atminties pradinį adresą, kuris priskiriamas atskaitos kintamajam. Naujasis operatorius yra panašus į malloc (), esančią C. Tačiau C ++ kompiliatorius yra suderinamas su malloc (), tačiau geriausia naudoti naują operatorių, nes jis turi tam tikrų pranašumų prieš malloc (). Naujo operatoriaus sintaksė yra tokia:

 tipo kintamasis_name = naujas tipas (parametras_list); 

Čia „tipas“ reiškia kintamojo, kuriam turi būti priskirta atmintis, duomenų tipą. Žodis „kintamasis_name“ yra pavadinimas, suteiktas nuorodos kintamajam, turinčiam rodyklę į atmintį. Skliausteliuose čia nurodomas konstruktoriaus kvietimas. Parametrų sąrašas yra vertybių, perduotų konstruktoriui, kad būtų galima inicijuoti naujai sukurtą objektą, sąrašas.

Naujasis operatorius skiria pakankamai atminties, reikalingo tam tikro tipo objektui. Vadinasi, jam nereikia „sizeof“ () operatoriaus, taip pat nereikalaujama keisti atminties, pvz., Malloc (), kuri naudoja realloc (), perskirstyti atmintį. Naujasis operatorius yra konstrukcija; ji deklaruoja objekto konstruktorių, o deklaracija yra naudojama objektui inicijuoti.

Žinome, kad naujasis operatorius skiria atmintį krūvoje, o krūvos dydis yra ribotas. Taigi, jei krūva yra atmintyje ir naujas operatorius bando priskirti atmintį, tai sukels naujo operatoriaus gedimą. Jei naujasis operatorius nepaskiria atminties, jis išmeta išimtį ir, jei jūsų kodas negalės apdoroti šios išimties, programa nutraukiama neįprastai.

Operatoriaus paskirta atmintis gali būti atlaisvinta naudojant ištrynimo operatorių. Naujasis operatorius nutraukia vykdymo laiką, nes jis yra operatorius, o ne funkcija.

Malloc apibrėžimas ()

Malloc () yra funkcija, naudojama norint paskirstyti reikiamą atminties kiekį krūvoje. Metodas grąžina „void“ tipo žymeklį, kuris yra toliau, tipo cast, kad gautumėte rodiklį į tam tikro tipo atmintį, ir šis žymeklis į atmintį priskiriamas pamatiniam kintamajam. „Malloc“ () funkcija yra panaši į naują operatorių „C ++“, nes ji naudojama dinamiškai priskirti atmintį. Malloc () yra standartinė bibliotekos funkcija. Malloc () funkcijos sintaksė yra tokia:

 tipas variklis_name = (tipas *) malloc (sizeof (type)); 

Čia „tipas“ nurodo kintamojo, kuriam reikia priskirti atmintį, duomenų tipą. Kintamasis_name yra nuorodos kintamojo, kuriam bus priskirtas malloc (), pavadinimas. (Tipas *) aprašo tipo liejimą, kad gautumėte rodyklę į tam tikro tipo atmintį. Sizeof () apibūdina malloc (), kad reikalingas atminties dydis.

Malloc () reikalauja tipo liejimo, nes rodyklė, kurią grąžina malloc (), yra tuščia, todėl, norint priskirti tipui žymeklį, reikia atlikti tipo liejimą. Dydis () reikalingas, nes funkcija malloc () skiria neapdorotą atmintį, todėl reikia nurodyti Malloc () funkcijai, kokią atminties dydį ji turi skirti. Jei skiriama atmintis yra nepakankama, ją galima pakeisti arba perskirstyti naudojant realloc ().

„Malloc“ () funkcija paskirsto atmintį ant krūvos. Tuo atveju, jei krūva yra atmintyje, funkcija malloc () grąžina NULL rodyklę. Vadinasi, prieš naudojant „Malloc“ () rodomą rodiklį, kuriame yra rodyklė, reikia patikrinti, priešingu atveju jis gali sukelti sistemos gedimą.

„Malloc“ () funkcijos skiriama atmintis paskirstoma nemokamai (). Kadangi funkcijų skambinimas lemia pridėtinę vertę, malloc () reikalauja daugiau laiko vykdymui.

Pagrindiniai skirtumai tarp naujo ir malloc ()

  1. Naujasis operatorius yra konstrukcija, įdiegta „C ++“ ir naudojama „Java“, „C #“ ir pan. Kita vertus, malloc () yra standartinė bibliotekos funkcija, nustatyta tik C kalba ir palaikoma „C ++“.
  2. Naujasis operatorius skiria pakankamai atminties tam tikro tipo objektui, todėl nereikalauja dydžio operatoriaus. Kita vertus, „malloc“ () funkcija reikalauja, kad dydis () operatorius leistų funkcijai žinoti, kokią atminties dydį jis turi skirti.
  3. Naujasis operatorius deklaracijos metu gali iškviesti objekto konstruktorių. Kita vertus, malloc () funkcija negali skambinti konstruktoriumi.
  4. Operatorius „naujas“ gali būti perkrautas, tačiau „malloc“ () negalėjo.
  5. Jei naujasis operatorius nepaskiria atminties, jis išmeta išimtį, kuri turi būti tvarkoma pagal kodą, kitaip programa bus nutraukta. Kita vertus, malloc () funkcija grąžina NULL rodyklę, jei nepavyksta priskirti atminties. Jei rodyklė naudojama nenaudojant to, tai sukels sistemos gedimą.
  6. Naudojant naują operatorių priskirtą atmintį galima ištrinti „ištrinti“. Kita vertus, naudojant „malloc“ () funkciją priskirtą atmintį galima paskirstyti nemokamai ().
  7. Kai atmintis yra paskirta naudojant naują operatorių, ji jokiu būdu negali būti pakeista. Kita vertus, naudojant malloc () funkciją priskirtą atmintį galima perskirstyti (keisti) naudojant realloc () funkciją.
  8. Naujo įvykdymo laikas yra mažesnis, palyginti su malloc (), nes malloc yra funkcija ir nauja yra konstrukcija.

Išvada:

Malloc () funkcija yra senas būdas dinamiškai paskirstyti atmintį. Šiandien naujasis operatorius naudojamas atminties paskirstymui vykdymo metu, nes jis turi tam tikrų pranašumų prieš malloc ().

Top