Odporúčaná, 2024

Redakcia Choice

Rozdiel medzi novým a malloc ()

Nové a malloc () sa používajú na dynamickú alokáciu pamäte. Aj keď sa nové a malloc () líšia v mnohých kontextoch. Hlavným rozdielom medzi novým a malloc () je, že nový je operátor, ktorý sa používa ako konštrukt. Na druhej strane malloc () je štandardná funkcia knižnice, ktorá sa používa na prideľovanie pamäte pri behu. Ostatné rozdiely medzi nimi sú uvedené nižšie v porovnávacej tabuľke:

Porovnávacia tabuľka

Základ pre porovnanieNovýmalloc ()
JazykNový operátor je špecifická vlastnosť C ++, Java a C #.Funkcia malloc () je vlastnosť C.
príroda"nový" je operátor.malloc () je funkcia.
veľkosť( )nový nepotrebuje veľkosť operátora a prideľuje dostatočnú pamäť pre konkrétny typmalloc vyžaduje, aby operátor veľkosti vedel, akú veľkosť pamäte má prideliť.
staviteľNový operátor môže zavolať konštruktoru objektu.malloc () nemôže vôbec zavolať konštruktérovi.
inicializáciaNový operátor by mohol inicializovať objekt pri prideľovaní pamäte.Inicializáciu pamäte sa nepodarilo vykonať v programe malloc.
preťaženieNový operátor môže byť preťažený.Malloc () nemôže byť nikdy preťažený.
zlyhaniePri neúspechu zamietne operátor nová výnimka.Po zlyhaní, malloc () vráti hodnotu NULL.
delokáciaPrideľovanie pamäte novým, prideleným pomocou "odstrániť".Pridelenie pamäte pomocou malloc () sa deallokuje pomocou funkcie free ().
prerozdelenieNový operátor nealokuje pamäť.Pamäť pridelená malloc () môže byť znovu pridelená pomocou realloc ().
popravaNový operátor skracuje čas vykonania.Malloc () vyžaduje viac času na vykonanie.

Definícia nového

Operátorom nový je operátor alokácie pamäte, ktorý dynamicky alokuje pamäť. Nový operátor prideľuje pamäť do haldy a vráti začiatočnú adresu tejto pamäte, ktorá je priradená referenčnej premennej. Nový operátor je podobný malloc () v C. Avšak kompilátor C ++ je kompatibilný s malloc (), ale je najlepšie použiť nového operátora, pretože má určité výhody oproti malloc (). Syntax nového operátora je nasledujúci:

 type variable_name = nový typ (parameter_list); 

Tu "typ" označuje dátový typ premennej, pre ktorú má byť pamäť pridelená. Slovo "variable_name" je názov daný referenčnej premennej, ktorá drží ukazovateľ do pamäte. V zátvorke sa špecifikuje volanie konštruktora. Zoznam parametrov je zoznam hodnôt, ktoré sa prenášajú do konštruktora na inicializáciu novovytvoreného objektu.

Nový operátor alokuje dostatočnú pamäť potrebnú pre objekt špecifického typu. Preto nevyžaduje operátor sizeof (), ani nevyžaduje zmenu veľkosti pamäte ako malloc (), ktorá používa realloc () na premiestnenie pamäte. Nový operátor je konštrukt; volá konštruktor objektu pri deklarácii, ktorá sa všeobecne používa na inicializáciu objektu.

Vieme, že nový operátor alokuje pamäť v halde a veľkosť haldy je obmedzená. Ak je teda halda nedostatočná a nový operátor sa pokúsi prideliť pamäť, bude to mať za následok zlyhanie nového operátora. Ak nový operátor nedokáže prideliť pamäť, bude hádzať výnimku, a ak váš kód nie je schopný zvládnuť túto výnimku, program sa ukončí abnormálne.

Pamäť pridelená operátorom novým môže byť uvoľnená pomocou operátora vymazania. Nový operátor skracuje čas vykonávania, pretože je operátorom, nie funkciou.

Definícia malloc ()

Funkcia malloc () je funkcia, ktorá sa používa na pridelenie požadovanej množiny pamäte na halde. Metóda vráti ukazovateľ typu "void", ktorý je ďalej, typu cast pre získanie ukazovateľa do pamäte určeného typu a tento ukazovateľ do pamäte je priradený referenčnej premennej. Funkcia malloc () je podobná novému operátorovi v jazyku C ++, pretože sa používa na dynamickú alokáciu pamäte. Funkcia malloc () je štandardná funkcia knižnice. Syntax funkcie malloc () je nasledujúci:

 typ variable_name = (typ *) malloc (veľkosťof (typ)); 

Tu "typ" označuje dátový typ premennej, pre ktorú má byť pamäť pridelená. Názov variable_name je názov referenčnej premennej, ku ktorej bude priradený ukazovateľ vrátený malloc (). (Typ *) opisuje odovzdanie typu na získanie ukazovateľa do pamäte v určitom type. Veľkosť () opisuje malloc (), že veľkosť pamäte je potrebná.

Funkcia malloc () vyžaduje casting typu, pretože ukazovateľ vrátený malloc () je neplatného typu, takže pre priradenie typu ukazovateľovi je požadované odlievanie typu. Veľkosť () je povinná, pretože funkcia malloc () prideľuje nespracovanú pamäť, preto je potrebné, aby funkciu malloc () určila, akú veľkosť pamäte má alokovať. Ak alokovaná pamäť nie je dostatočná, môže byť zmenená veľkosť alebo znovu priradená pomocou realloc ().

Funkcia malloc () alokuje pamäť na halde. V prípade, že halda je nedostatok pamäte, funkcia malloc () vráti ukazovateľ NULL. Preto by mala byť referenčná premenná obsahujúca ukazovateľ vrátená malloc () skontrolovaná skôr, ako sa použije, inak môže dôjsť k zlyhaniu systému.

Pamäť pridelená funkciou malloc () je deallocated pomocou free (). Keď volanie funkcie vedie k režime, malloc () vyžaduje viac času na vykonanie.

Kľúčové rozdiely medzi novým a malloc ()

  1. Nový operátor je konštrukt zavedený v C ++ a používa sa v jazyku Java, C # atď. Na druhej strane malloc () je štandardná funkcia knižnice nájdená len v jazyku C a podporovaná C ++.
  2. Nový operátor alokuje dostatočnú pamäť pre objekt určeného typu, takže nevyžaduje veľkost 'operátora. Na druhej strane funkcia malloc () vyžaduje operátor sizeof (), aby funkciu zistila, akú veľkosť pamäte má alokovať.
  3. Nový operátor môže vo vyhlásení zavolať staviteľa objektu. Na druhej strane funkcia malloc () nemôže zavolať konštruktérovi.
  4. Operátor "nový" by mohol byť preťažený, ale malloc () nemohol.
  5. Ak nový operátor nedokáže prideliť pamäť, zaraďuje výnimku, ktorá musí byť spracovaná iným kódom, ktorý program ukončí. Na druhej strane funkcia malloc () vráti ukazovateľ NULL, ak sa nepodarí prideliť pamäť. Ak sa ukazovateľ používa bez toho, aby ste to skontrolovali, dôjde k zlyhaniu systému.
  6. Pamäť pridelená novým operátorom môže byť zrušená pomocou funkcie "odstrániť". Na druhej strane pamäť pridelená pomocou funkcie malloc () môže byť deallocated pomocou free ().
  7. Po pridelení pamäte pomocou nového operátora nemožno v žiadnom prípade zmeniť jeho veľkosť. Na druhej strane pamäť pridelená funkciou malloc () môže byť znovu pridelená (zmena veľkosti) pomocou funkcie realloc ().
  8. Čas vykonania nového je menej v porovnaní s malloc (), pretože malloc je funkcia a nová je konštrukcia.

záver:

Funkcia malloc () je starý spôsob, ako dynamicky alokovať pamäť. V súčasnosti sa nový operátor používa na pridelenie pamäte za behu, pretože má určité výhody oproti malloc ().

Top