Razlika med new in malloc ()

Avtor: Laura McKinney
Datum Ustvarjanja: 1 April 2021
Datum Posodobitve: 5 Maj 2024
Anonim
iOS App Development with Swift by Dan Armendariz
Video.: iOS App Development with Swift by Dan Armendariz

Vsebina


Novo in malloc () se uporabljata za dinamično razporejanje pomnilnika. Čeprav sta novost in malloc () v različnih vidikih različna. Primarna razlika med new in malloc () je v tem novo je operator, ki se uporablja kot konstrukt. Po drugi strani pa malloc () je standardna knjižnična funkcija, ki se uporablja za dodeljevanje pomnilnika med izvajanjem. Ostale razlike med njimi so obravnavane spodaj v primerjalni tabeli:

  1. Primerjalna tabela
  2. Opredelitev
  3. Ključne razlike
  4. Zaključek

Primerjalna tabela

Osnove za primerjavonovomalloc ()
JezikOperator new je posebnost C ++, Java in C #. Funkcija malloc () je značilnost C.
Narava"novo" je operater.malloc () je funkcija.
sizeof ()novo ne potrebuje operator operaterja velikosti dovolj pomnilnika za določeno vrsto malloc zahteva, da operater sizeof ve, kakšno velikost pomnilnika mora dodeliti.
Konstruktor Operator new lahko pokliče konstruktorja predmeta.malloc () sploh ne more poklicati konstruktorja.
InicializacijaOperator new lahko inicializira predmet, medtem ko mu dodeli pomnilnik.Inicializacije pomnilnika ni bilo mogoče na kratko.
Preobremenitev Operator novo je mogoče preobremeniti.Malloka () ni mogoče nikoli preobremeniti.
NeuspehOb neuspehu operater novi vrže izjemo.Ob neuspehu malloc () vrne NULL.
PrerazporeditevDodelitev pomnilnika po novem, ki se ga locira z uporabo "delete".Razporeditev pomnilnika z malloc () razporejamo s funkcijo free ().
PrerazporeditevNovi operater ne prerazporedi pomnilnika.Pomnilnik, dodeljen malloc (), lahko prerazporedite s pomočjo realloc ().
IzvedbaOperater novo skrajša čas izvedbe.Malloc () zahteva več časa za izvedbo.


Opredelitev novega

Operater novo je operater razporejanja pomnilnika, ki dinamično razporeja pomnilnik. Novi operater dodeli pomnilnik v kopici in vrne začetni naslov tega pomnilnika, ki je dodeljen referenčni spremenljivki. Novi operater je podoben malloc () v C. Vendar je prevajalnik C ++ združljiv z malloc (), vendar je najbolje uporabiti novega operaterja, saj ima določene prednosti pred malloc (). Sintaksa novega operaterja je naslednja:

vnesite spremenljivko_ime = nov tip (seznam_parametrov);

Tu "tip" označuje podatkovni tip spremenljivke, za katero je treba dodeliti pomnilnik. Beseda „ime_deli_premenitelja“ je ime, ki je bilo podano referenčni spremenljivki in ima kazalec na pomnilnik. V oklepaju je tukaj določeno klicanje konstruktorja. Seznam parametrov je seznam vrednosti, ki jih posreduje konstruktorju za inicializacijo na novo zgrajenega predmeta.

Novi operater dodeli dovolj pomnilnika, potrebnega za predmet določene vrste. Zato ne potrebuje operaterja sizeof () niti ne spreminja velikosti pomnilnika, kot je malloc (), ki za realociranje pomnilnika uporablja realloc (). Novi operater je konstrukt; pokliče konstruktor predmeta, medtem ko deklaracijo, ki se običajno uporablja za inicializacijo predmeta.


Vemo, da novi operater razporeja pomnilnik v kup in je velikost kopice omejena. Če torej kopica ostane brez pomnilnika in novi operater poskuša dodeliti pomnilnik, bo to povzročilo neuspeh novega operaterja. Če novi operater ne dodeli pomnilnika, bo vrgel izjemo in če vaša koda te izjeme ne bo zmogla, program preneha nenormalno.

Pomnilnik, ki ga dodeli novi operater, se lahko sprosti s pomočjo operaterja brisanja. Novi operater skrajša čas izvedbe, saj je operater, ne funkcija.

Opredelitev malloc ()

The malloc () je funkcija, ki se uporablja za dodelitev želene količine pomnilnika na kopici. Metoda vrne kazalec vrste 'void', ki je nadalje vtipkan, da dobite kazalec v pomnilnik določene vrste in ta kazalec v pomnilnik je dodeljen referenčni spremenljivki. Funkcija malloc () je podobna novemu operaterju v C ++, saj se uporablja za dinamično razporejanje pomnilnika. Malloc () je standardna knjižnična funkcija. Sintaksa funkcije malloc () je naslednja:

vnesite spremenljivko_ime = (vrsta *) malloc (sizeof (tip));

Tu "vrsta" označuje vrsto podatkov spremenljivke, za katero je treba dodeliti pomnilnik. Ime spremenljivke je ime referenčne spremenljivke, ki ji bo dodeljen kazalec, ki ga vrne malloc (). (Type *) opisuje predvajanje tipa za pridobitev kazalca na pomnilnik določene vrste. Sizeof () opisuje malloc () velikost pomnilnika.

Malloc () zahteva uvajanje tipa, ker je kazalec, ki ga vrne malloc (), ničen, zato je za dodelitev tipa kazalcu potrebno uvajanje tipa. Sizeof () je potreben, ker funkcija malloc () dodeli neobdelan pomnilnik, zato mora funkciji malloc () povedati, kakšno velikost pomnilnika mora dodeliti. Če dodeljeni pomnilnik ne zadostuje, ga je mogoče spremeniti v velikost ali prerazporediti z realloc ().

Funkcija malloc () razporeja pomnilnik na kopici. V primeru, da kup ostane brez pomnilnika, funkcija malloc () vrne kazalec NULL. Zato je treba pred uporabo preveriti referenčno spremenljivko, ki vsebuje kazalec, ki ga vrne malloc (), sicer lahko pride do zrušenja sistema.

Pomnilnik, dodeljen funkciji malloc (), se razporedi z uporabo free (). Ker klic funkcije vodi do režijskih stroškov, malloc () zahteva več časa za izvedbo.

  1. Novi operater je konstrukt, ki je predstavljen v jeziku C ++ in se uporablja v Java, C # itd. Po drugi strani pa je malloc () standardna knjižnična funkcija, ki jo najdemo samo v jeziku C in jo podpira C ++.
  2. Novi operater dodeli dovolj pomnilnika za objekt določene vrste, zato ne potrebuje operaterja velikosti. Po drugi strani funkcija malloc () zahteva operater sizeof (), da funkcija ve, kakšno velikost pomnilnika mora dodeliti.
  3. Novi operater lahko med deklaracijo pokliče konstruktorja objekta. Po drugi strani funkcija malloc () ne more poklicati konstruktorja.
  4. Operater "novo" je lahko preobremenjen, vendar malloc () ni mogel.
  5. Če novi operater ne dodeli pomnilnika, vrže izjemo, ki jo mora obravnavati koda, sicer program preneha. Po drugi strani funkcija malloc () vrne kazalec NULL, če ne dodeli pomnilnika. Če se kazalec uporabi brez preverjanja tega, se bo sistem zrušil.
  6. Pomnilnik, dodeljen novemu operaterju, se lahko locira z uporabo 'delete'. Po drugi strani se pomnilnik, dodeljen s funkcijo malloc (), lahko locira z uporabo free ().
  7. Ko je pomnilnik dodeljen z novim operaterjem, ga nikakor ne morete spremeniti. Po drugi strani lahko pomnilnik, dodeljen s funkcijo malloc (), prerazporedimo (spremenimo velikost) s funkcijo realloc ().
  8. Čas izvedbe novega je manjši v primerjavi z malloc (), ker je malloc funkcija, new pa konstrukt.

Zaključek:

Funkcija malloc () je stari način za dinamično razporejanje pomnilnika. Dandanes se novi operater uporablja za dodeljevanje pomnilnika med izvajanjem, ker ima določene prednosti pred malloc ().