Priporočena, 2024

Izbira Urednika

Razlika med novim in malloc ()

Novi in ​​malloc () se uporabljata za dinamično dodelitev pomnilnika. Čeprav sta nova in malloc () različna v mnogih kontekstih. Glavna razlika med novim in malloc () je ta, da je novi operater, ki se uporablja kot konstrukt. Po drugi strani je malloc () standardna knjižnična funkcija, ki se uporablja za dodeljevanje pomnilnika med izvajanjem. Druge razlike med njimi so obravnavane spodaj v primerjalni tabeli:

Primerjalna tabela

Podlaga za primerjavonovomalloc ()
JezikOperator new je posebna značilnost C ++, Java in C #.Funkcija malloc () je funkcija C.
Narava"new" je operater.malloc () je funkcija.
sizeof ()novo ne potrebuje operaterja velikosti, kot ga dodeli dovolj pomnilnika za določen tipmalloc zahteva, da operater velikosti ve, kakšno velikost pomnilnika mora dodeliti.
KonstruktorOperator new lahko pokliče konstruktorja objekta.Malloc () ne more klicati konstruktorja.
InicializacijaOperator new lahko inicializira objekt, medtem ko mu dodeli pomnilnik.Inicializacije pomnilnika ni bilo mogoče izvesti v malloc.
PreobremenitevOperater je lahko preobremenjen.Malloc () nikoli ne more biti preobremenjen.
NeuspehOb neuspehu operater new vrne izjemo.Ob neuspehu malloc () vrne NULL.
RazdelitevDodelitev pomnilnika po novem, je bila odstranjena z uporabo »brisanje«.Dodelitev pomnilnika z malloc () je preklicana s funkcijo free ().
PrerazporeditevNovi operater ne prerazporedi pomnilnika.Pomnilnik, ki ga dodeli malloc (), se lahko ponovno dodeli z uporabo realloc ().
IzvajanjeOperater novo zmanjša čas izvršitve.Malloc () zahteva več časa za izvedbo.

Opredelitev novega

Operator new je operater dodeljevanja pomnilnika, ki dinamično dodeljuje pomnilnik. Novi operator 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 (). Skladnja novega operaterja je naslednja:

 vpišite variable_name = new type (parameter_list); 

Tukaj »tip« označuje tip podatkov spremenljivke, za katero je treba dodeliti pomnilnik. Beseda “ime_ spremenljivke” je ime, podano referenčni spremenljivki, ki drži kazalec na pomnilnik. V oklepajih je tukaj navedeno klicanje konstruktorja. Parameter_list je seznam vrednosti, ki se posredujejo konstruktorju za inicializacijo na novo zgrajenega objekta.

Novi operator dodeli dovolj pomnilnika, ki je potreben za objekt določene vrste. Zato ne zahteva operatora sizeof () niti ni potrebno spremeniti velikosti pomnilnika, kot je malloc (), ki uporablja realloc () za prerazporeditev pomnilnika. Novi operater je konstrukt; kliče konstruktor objekta, medtem ko se deklaracija običajno uporablja za inicializacijo objekta.

Vemo, da novi operater dodeli pomnilnik v kopici in je velikost kopice omejena. Torej, če kopica ni v pomnilniku in novi operater poskuša dodeliti pomnilnik, bo to pripeljalo do napake novega operaterja. Če novi operater ne dodeli pomnilnika, bo vrgel izjemo in če vaša koda ne more obravnavati te izjeme, se program neobičajno konča.

Pomnilnik, ki ga dodeli operater nov, se lahko osvobodi s pomočjo operaterja brisanja. Novi operater skrajša čas izvršitve, saj je operater in ne funkcija.

Opredelitev malloc ()

Malloc () je funkcija, ki se uporablja za dodelitev zahtevane količine pomnilnika na kopici. Metoda vrne kazalec tipa 'void', ki je nadalje, tip cast za pridobitev kazalca na pomnilnik določenega tipa in ta kazalec na pomnilnik je dodeljen referenčni spremenljivki. Funkcija malloc () je podobna novemu operaterju v C ++, saj se uporablja za dinamično dodeljevanje pomnilnika. Malloc () je standardna knjižnična funkcija. Sintaksa funkcije malloc () je naslednja:

 tipa variable_name = (tip *) malloc (sizeof (type)); 

Tukaj »tip« označuje tip podatkov spremenljivke, za katero je treba dodeliti pomnilnik. Ime spremenljivke je ime referenčne spremenljivke, kateri bo dodeljen kazalec, ki ga vrne malloc (). (Tip *) opisuje ulivanje tipa za pridobitev kazalca na pomnilnik v določenem tipu. Sizeof () opisuje malloc (), to, kaj je potrebna velikost pomnilnika.

Malloc () zahteva ulivanje tipa, ker je kazalec, ki ga vrne malloc (), prazen tip, zato je za dodelitev tipa kazalcu potreben tip vlivanja. Sizeof () je potreben, ker funkcija malloc () dodeli surovi pomnilnik, zato je potrebno povedati funkcijo malloc (), katero velikost pomnilnika mora dodeliti. Če dodeljeni pomnilnik ne zadostuje, ga lahko spreminjate ali prestavljate z uporabo realloc ().

Funkcija malloc () dodeli pomnilnik na kopico. V primeru, da je kopica izven pomnilnika, potem funkcija malloc () vrne kazalec NULL. Zato je treba referenčno spremenljivko, ki vsebuje kazalec, ki ga vrne malloc (), preveriti, preden se uporabi, sicer lahko povzroči sesutje sistema.

Pomnilnik, dodeljen s funkcijo malloc (), je odstranjen z uporabo funkcije free (). Ko klic funkcije vodi do dodatnih stroškov, malloc () zahteva več časa za izvedbo.

Ključne razlike med novim in malloc ()

  1. Novi operater je konstrukt, uveden v C ++ in uporabljen v Javi, C #, itd. Po drugi strani je malloc () standardna knjižnična funkcija, ki jo najdemo samo v C jeziku in jo podpira C ++.
  2. Novi operator dodeli dovolj pomnilnika za objekt določene vrste, tako da ne zahteva operaterja velikosti. Po drugi strani pa funkcija malloc () zahteva, da operator sizeof () prepusti funkciji, da ve, kakšna velikost pomnilnika mora dodeliti.
  3. Novi operater lahko kliče konstruktorja objekta med deklaracijo. Po drugi strani pa funkcija malloc () ne more priklicati konstruktorja.
  4. Operater "new" bi lahko bil preobremenjen, vendar malloc () ni mogel.
  5. Če novi operater ne dodeli pomnilnika, vrne izjemo, ki jo mora obravnavati koda, ki jo bo program zaključil. Po drugi strani pa funkcija malloc () vrne kazalec NULL, če ne dodeli pomnilnika. Če se kazalec uporabi, ne da bi to preverili, bo to povzročilo sesutje sistema.
  6. Pomnilnik, ki je dodeljen z novim operaterjem, se lahko razreši z uporabo "delete". Po drugi strani pa lahko pomnilnik, dodeljen s pomočjo funkcije malloc (), razrešimo z uporabo funkcije free ().
  7. Ko je pomnilnik dodeljen z novim operaterjem, ga ni mogoče spreminjati. Po drugi strani pa lahko pomnilnik, dodeljen s pomočjo funkcije malloc (), z uporabo funkcije realloc () ponovno prerazporedimo (spremenimo).
  8. Čas izvedbe novega je manjši v primerjavi z malloc (), ker je malloc funkcija in nova je konstrukt.

Sklep:

Funkcija malloc () je stari način dinamičnega dodeljevanja pomnilnika. Danes se novi operater uporablja za dodelitev pomnilnika med izvajanjem, ker ima določene prednosti pred malloc ().

Top