Skirtumas tarp naujo ir malloc ()

Autorius: Laura McKinney
Kūrybos Data: 1 Balandis 2021
Atnaujinimo Data: 5 Gegužė 2024
Anonim
Section, Week 5
Video.: Section, Week 5

Turinys


Naujasis ir malloc () abu naudojami dinamiškai paskirstyti atmintį. Nors naujas ir malloc () skiriasi daugeliu minusų. Pagrindinis skirtumas tarp naujo ir malloc () yra tas nauja yra operatorius, naudojamas kaip konstruktas. Kita vertus, malloc () yra standartinė bibliotekos funkcija, naudojama paskirstyti atmintį vykdymo metu. Kiti skirtumai tarp jų aptariami žemiau palyginimo diagramoje:

  1. Palyginimo diagrama
  2. Apibrėžimas
  3. Pagrindiniai skirtumai
  4. Išvada

Palyginimo diagrama

Palyginimo pagrindasnaujamalloc ()
KalbaNaujasis operatorius yra specifinė „C ++“, „Java“ ir „C #“ ypatybė. Funkcija malloc () yra C savybė.
Gamta„naujas“ yra operatorius.malloc () yra funkcija.
dydis( )naujam nereikia operatoriaus dydžio, nes jame nėra pakankamai atminties konkrečiam tipui „malloc“ reikalauja, kad operatoriaus dydis žinotų, kokį atminties dydį jis turi skirti.
Konstruktorius Naujasis operatorius gali paskambinti objekto konstruktoriumi.malloc () niekaip negali paskambinti konstruktoriui.
PradėjimasNaujasis operatorius galėtų inicijuoti objektą, jam paskirstydamas atmintį.Atminties negalima inicijuoti naudojant „malloc“.
Perkrovos Naujas operatorius gali būti perkrautas.Malloc () niekada negali būti perkrautas.
NesėkmėDėl nesėkmės naujasis operatorius pateikia išimtį.Dėl nesėkmės malloc () grąžina NULL.
SkirstymasAtminties paskirstymas pagal naują, paskirstytą naudojant „trinti“.Atminties paskirstymas pagal malloc () paskirstomas naudojant nemokamą () funkciją.
PerskirstymasNaujasis operatorius neatnaujina atminties.„Malloc“ () paskirta atmintis gali būti perskirstyta naudojant „realloc“ ().
VykdymasNaujas operatorius sutrumpina vykdymo laiką.Malloc () vykdymui reikia daugiau laiko.


Apibrėžimas naujas

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

tipo kintamasis_pavadinimas = naujas tipas (parametras_ sąrašas);

Čia „tipas“ žymi kintamojo, kuriam reikia skirti atmintį, duomenų tipą. Žodis „kintamasis_vardas“ yra vardas, suteiktas pamatiniam kintamajam, kuris laiko rodyklę atmintyje. Skliaustelis nurodo konstruktoriaus iškvietimą. Parametras_listas yra reikšmių, kurios perduodamos konstruktoriui inicijuoti naujai pastatytą objektą, sąrašas.

Naujasis operatorius skiria pakankamai atminties, reikalingos konkretaus tipo objektui. Taigi, jam nereikia dydžio () operatoriaus ir nereikia keisti atminties dydžio, pavyzdžiui, „malloc“ (), kuris naudoja „realloc“ () atminties perskirstymui. Naujasis operatorius yra konstruktas; jis iškviečia objekto konstruktorių, tuo tarpu deklaracija, kuri paprastai naudojama objektui inicijuoti.


Mes žinome, kad naujasis operatorius atmintį skiria krūvoje, o krūvos dydis yra ribotas. Taigi, jei krūvoje trūksta atminties ir naujas operatorius bando skirti atmintį, tai sukels naujojo operatoriaus gedimą. Jei naujajam operatoriui nepavyksta paskirstyti atminties, jis įveda išimtį, o jei jūsų kodas negali sutvarkyti tos išimties, programa nutraukiama neįprastai.

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

Apibrėžimas malloc ()

malloc () yra funkcija, naudojama paskirstyti reikalaujamą atminties kiekį krūvoje. Metodas grąžina „void“ tipo rodyklę, kuri yra toliau, įveskite cast, norėdami gauti rodyklę į nurodyto tipo atmintį, o šis rodyklė į atmintį priskiriama atskaitos kintamajam. „Malloc“ () funkcija yra panaši į naują C ++ operatorių, nes ji naudojama dinamiškai paskirstyti atmintį. „Malloc“ () yra standartinė bibliotekos funkcija. Funkcijos malloc () sintaksė yra tokia:

tipo kintamasis_vardas = (tipas *) malloc (dydisof (tipas));

Čia „type“ nurodo kintamojo, kuriam reikia skirti atmintį, duomenų tipą. Kintamasis_vardas yra nuorodinio kintamojo vardas, kuriam bus priskirtas rodyklė, kurią grąžina malloc (). (Tipas *) apibūdina liejinio tipą, norint gauti rodyklę į konkrečios rūšies atmintį. Sizeof () apibūdina malloc (), tai yra, kokio dydžio reikia atminties.

Malloc () reikia liejimo tipo, nes rodyklė, kurią grąžina malloc (), yra tuščio tipo, todėl norint priskirti rodyklę tipui, reikia lieti tipą. Dydisofono () reikalingas, nes funkcija malloc () skiria neapdorotą atmintį, todėl reikia pranešti funkcijai malloc (), kokį atminties dydį ji turi skirti. Jei skirtos atminties nepakanka, jos dydį galima pakeisti arba perskirstyti naudojant realloc ().

Funkcija malloc () paskirsto atmintį krūvoje. Tuo atveju, jei krūvos nėra atmintyje, funkcija malloc () grąžina NULL rodyklę. Taigi atskaitos kintamasis, kuriame yra rodyklė, grąžinta naudojant malloc (), turėtų būti patikrintas prieš jį naudojant, kitaip jis gali sukelti sistemos gedimą.

Funkcija „malloc ()“ paskirta atmintis paskirstoma naudojant nemokamą (). Kadangi funkcijos kvietimas sukelia pridėtinę vertę, malloc () reikalauja daugiau laiko vykdymui.

  1. Naujasis operatorius yra konstrukcija, įdiegta C ++ ir naudojama Java, C # ir kt. Kita vertus, malloc () yra standartinė bibliotekos funkcija, randama tik C kalba ir palaikoma C ++.
  2. Naujasis operatorius skiria pakankamai atminties nurodyto tipo objektui, todėl jam nereikia dydžio operatoriaus. Kita vertus, malloc () funkcijai reikia, kad operatorius sizeof () praneštų funkcijai, kokį atminties dydį ji turi skirti.
  3. Naujasis operatorius deklaracijos metu gali paskambinti objekto konstruktoriui. Kita vertus, malloc () funkcija negali iškviesti konstruktoriaus.
  4. Operatorius „naujas“ gali būti perkrautas, bet malloc () negalėjo.
  5. Jei naujajam operatoriui nepavyksta paskirstyti atminties, jis išmeta išimtį, kuri turi būti tvarkoma kodu, kitu atveju programa baigsis. Kita vertus, „malloc“ () funkcija pateikia NULL rodyklę, jei nepavyksta paskirstyti atminties. Jei rodyklė naudojama nepatikrinus to, ji suduos.
  6. Naudojant naują operatorių paskirta atmintis gali būti paskirstyta naudojant „trinti“. Kita vertus, naudojant „malloc“ () funkciją paskirta atmintis gali būti paskirstoma naudojant nemokamą ().
  7. Kai atmintis paskirstoma naudojant naują operatorių, jos dydis negali būti pakeistas. Kita vertus, atmintį, paskirstytą naudojant „malloc“ () funkciją, galima perskirstyti (pakeisti dydį) naudojant realloc () funkciją.
  8. Naujo vykdymo laikas yra mažesnis, palyginti su malloc (), nes malloc yra funkcija, o naujas yra konstruktas.

Išvada:

Funkcija „malloc“ () yra senas būdas dinamiškai paskirstyti atmintį. Šiais laikais naujasis operatorius naudojamas paskirstyti atmintį vykdymo metu, nes jis turi tam tikrų pranašumų, palyginti su „malloc“ ().