Preporučeno, 2024

Izbor Urednika

Razlika između novog i malloc ()

Novi i malloc () se koriste za dinamičko dodjeljivanje memorije. Iako su novi i malloc () različiti u mnogim kontekstima. Primarna razlika između novog i malloc () je da je novi operator operator koji se koristi kao konstrukt. S druge strane, malloc () je standardna knjižnična funkcija koja se koristi za dodjelu memorije tijekom izvođenja. Druge razlike između njih navedene su u tablici usporedbe u nastavku:

Tablica usporedbe

Osnova za usporedbunovimalloc ()
JezikOperator new je specifična značajka C ++, Java i C #.Funkcija malloc () je značajka C.
Priroda"new" je operator.malloc () je funkcija.
veličina( )new ne treba sizeof operator asit dodijeliti dovoljno memorije za određeni tipmalloc zahtijeva da operator operator sizeof zna koliko je memorije potrebno dodijeliti.
KonstruktorOperator new može nazvati konstruktora objekta.malloc () uopće ne može uputiti poziv konstruktoru.
InicijalizacijaOperator new može inicijalizirati objekt dok mu dodjeljuje memoriju.Inicijalizacija memorije nije mogla biti izvršena u malloc.
preopterećenjeOperator new može biti preopterećen.Malloc () nikad ne može biti preopterećen.
NeuspjehNakon neuspjeha, operator new baca iznimku.U slučaju neuspjeha, malloc () vraća NULL.
dealociranjeDodjeljivanje memorije novim, oslobođeno pomoću "brisanje".Dodjela memorije od strane malloc () se oslobađa pomoću funkcije free ().
ponovna dodjelaNovi operator ne preusmjerava memoriju.Memorija koju dodjeljuje malloc () može se preraspodijeliti pomoću realloc ().
IzvršenjeOperator new smanjuje vrijeme izvršenja.Malloc () zahtijeva više vremena za izvršenje.

Definicija novog

Operator new je operator dodjele memorije koji dinamički dodjeljuje memoriju. Novi operator dodjeljuje memoriju u hrpi i vraća početnu adresu te memorije koja je dodijeljena referentnoj varijabli. Novi operator je sličan malloc () u C. Međutim, C ++ kompajler je kompatibilan s malloc () ali je najbolje koristiti novi operator jer ima određene prednosti u odnosu na malloc (). Sintaksa novog operatora je sljedeća:

 upišite variable_name = novi tip (parametar_list); 

Ovdje "tip" označava vrstu podataka varijable za koju se memorija mora dodijeliti. Riječ “varijabla_ime” je ime dano referentnoj varijabli koja drži pokazivač na memoriju. Ovdje se u zagradama navodi pozivanje konstruktora. Parametar_list je popis vrijednosti koje se prosljeđuju konstruktoru za inicijalizaciju novoizgrađenog objekta.

Novi operator dodjeljuje dovoljno memorije koja je potrebna za objekt određene vrste. Dakle, ne zahtijeva operator sizeof () niti je potrebno promijeniti veličinu memorije kao malloc () koja koristi realloc () za preraspodjelu memorije. Novi operator je konstrukt; on poziva konstruktora objekta dok se deklaracija obično koristi za inicijalizaciju objekta.

Znamo da novi operator dodjeljuje memoriju u hrpi, a veličina hrpe je ograničena. Dakle, ako je gomila bez memorije i novi operator pokušava dodijeliti memoriju, to će dovesti do kvara novog operatera. Ako novi operator ne uspije dodijeliti memoriju, ona će baciti iznimku, a ako vaš kôd nije u stanju nositi se s tom iznimkom, program se nenormalno prekida.

Memorija dodijeljena od strane operatera može se osloboditi pomoću operatora brisanja. Novi operater prekida vrijeme izvršenja jer je operator, a ne funkcija.

Definicija malloc ()

Malloc () je funkcija koja se koristi za dodjelu tražene količine memorije na hrpi. Metoda vraća pokazivač tipa 'void' koji je dalje, tip cast za dobivanje pokazivača na memoriju određenog tipa i ovaj pokazivač na memoriju je dodijeljen referentnoj varijabli. Funkcija malloc () slična je novom operatoru u C ++-u jer se koristi za dinamičko dodjeljivanje memorije. Malloc () je standardna funkcija knjižnice. Sintaksa funkcije malloc () je sljedeća:

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

Ovdje "tip" označava tip podataka varijable za koju se memorija mora dodijeliti. Promjenjivo_ime je ime referentne varijable kojoj će biti dodijeljen pokazivač vraćen od strane malloc (). (Tip *) opisuje lijevanje tipa da bi se dobio pokazivač na memoriju u određenom tipu. Sizeof () opisuje malloc (), što je potrebna veličina memorije.

Malloc () zahtijeva određivanje tipa jer je pokazivač vraćen od strane malloc () tipa void, tako da je za dodjelu tipa pokazivaču potrebno lijevanje tipa. Sizeof () je obavezan jer funkcija malloc () dodjeljuje sirovu memoriju, stoga je potrebno ispisati malloc () funkciju koju količinu memorije mora dodijeliti. Ako dodijeljena memorija nije dovoljna, može se mijenjati ili preraspodijeliti pomoću realloc ().

Funkcija malloc () dodjeljuje memoriju na hrpi. U slučaju da je gomila nestala memorija, funkcija malloc () vraća NULL pokazivač. Dakle, referentna varijabla koja sadrži pokazivač vraćena od strane malloc (), treba provjeriti prije upotrebe, u suprotnom može rezultirati padom sustava.

Memorija dodijeljena malloc () funkcijom je oslobođena pomoću free (). Kako poziv funkcije dovodi do opterećenja, malloc () zahtijeva više vremena za izvršenje.

Ključne razlike između novog i malloc ()

  1. Novi operator je konstrukt uveden u C ++ i korišten u Javi, C #, itd. S druge strane, malloc () je standardna knjižnična funkcija koja se nalazi samo u C jeziku i koju podržava C ++.
  2. Novi operator dodjeljuje dovoljno memorije za objekt određene vrste tako da ne zahtijeva operatora veličine. S druge strane, funkcija malloc () zahtijeva da operator sizeof () dopusti funkciji da zna koja veličina memorije mora dodijeliti.
  3. Novi operator može nazvati konstruktora objekta dok je deklariran. S druge strane, funkcija malloc () ne može pozvati konstruktora.
  4. Operator "novi" mogao bi biti preopterećen, ali malloc () nije mogao.
  5. Ako novi operator ne uspije dodijeliti memoriju, on baca iznimku koja mora biti obrađena kodom koji će program prekinuti. S druge strane, funkcija malloc () vraća NULL pokazivač ako ne dodjeljuje memoriju. Ako se pokazivač koristi bez provjere, rezultirat će padom sustava.
  6. Memorija dodijeljena novim operatorom može se ukloniti pomoću "brisati". S druge strane, memorija dodijeljena pomoću funkcije malloc () može se razriješiti korištenjem free ().
  7. Kada se memorija dodijeli novim operatorom, ona se ionako ne može mijenjati. S druge strane, memorija dodijeljena pomoću funkcije malloc () može se preraspodijeliti (promijeniti veličinu) pomoću funkcije realloc ().
  8. Vrijeme izvršenja novog je manje u usporedbi s malloc () jer je malloc funkcija i nova je konstrukt.

Zaključak:

Funkcija malloc () je stari način dinamičkog dodjeljivanja memorije. Danas se novi operator koristi za dodjelu memorije tijekom izvođenja jer ima određene prednosti u odnosu na malloc ().

Top