Rozdiel medzi novými a malloc ()

Autor: Laura McKinney
Dátum Stvorenia: 1 Apríl 2021
Dátum Aktualizácie: 5 Smieť 2024
Anonim
Rozdiel medzi novými a malloc () - Technológie
Rozdiel medzi novými a malloc () - Technológie

Obsah


Nové aj malloc () sa používajú na dynamické alokovanie pamäte. Nové a malloc () sa však v mnohých nevýhodách líšia. Hlavný rozdiel medzi novým a malloc () je ten 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 za behu. Ďalšie rozdiely medzi nimi sú uvedené nižšie v porovnávacej tabuľke:

  1. Porovnávacia tabuľka
  2. definícia
  3. Kľúčové rozdiely
  4. záver

Porovnávacia tabuľka

Základ pre porovnanieNovýmalloc ()
JazykOperátor nový je špecifická vlastnosť C ++, Java a C #. Funkcia malloc () je znakom C.
príroda„nový“ je operátor.malloc () je funkcia.
veľkosť( )nový nepotrebuje veľkosť operátora, pretože vyhradí dostatok pamäte pre konkrétny typ malloc vyžaduje, aby operátor veľkosti mal vedieť, akú veľkosť pamäte musí prideliť.
staviteľ Operátor new môže zavolať konštruktora objektu.malloc () nemôže vôbec zavolať konštruktora.
inicializáciaNový operátor mohol inicializovať objekt a zároveň mu prideliť pamäť.Inicializáciu pamäte nebolo možné vykonať v malloc.
preťaženie Operátor nový môže byť preťažený.Malloc () nemôže byť nikdy preťažený.
zlyhaniePri zlyhaní vyvolá operátor novú výnimku.Pri zlyhaní malloc () vráti NULL.
delokáciaPriradenie pamäte novým, prideleným použitím "vymazať".Priradenie pamäte malloc () sa zruší pomocou funkcie free ().
prerozdelenieNový operátor neprideľuje pamäť.Pamäť pridelená malloc () môže byť prerozdelená pomocou realloc ().
popravaOperátor nový skracuje čas vykonávania.Malloc () vyžaduje viac času na vykonanie.


Definícia nového

Prevádzkovateľ Nový je operátor alokácie pamäte, ktorý dynamicky prideľuje pamäť. Nový operátor pridelí pamäť v halde a vráti počiatočnú adresu tejto pamäte, ktorá je priradená referenčnej premennej. Nový operátor je podobný malloc () v C. Kompilátor C ++ je však 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 nasledovná:

type variable_name = nový typ (parameter_list);

Tu „typ“ označuje dátový typ premennej, pre ktorú musí byť alokovaná pamäť. Slovo „názov premennej“ je názov priradený referenčnej premennej, ktorá drží ukazovateľ pamäte. V zátvorke je uvedené volanie konštruktora. Parameter_list je zoznam hodnôt, ktoré sa odovzdávajú konštruktoru na inicializáciu novo postaveného objektu.


Nový operátor pridelí dostatok pamäte potrebnej pre objekt konkrétneho typu. Nevyžaduje teda operátora veľkosti () ani nevyžaduje zmenu veľkosti pamäte ako malloc (), ktorá na prerozdelenie pamäte používa realloc (). Nový operátor je konštrukt; volá deklarátor objektu pri deklarácii, ktorá sa všeobecne používa na inicializáciu objektu.

Vieme, že nový operátor pridelí pamäť v halde a veľkosť haldy je obmedzená. Takže, ak je halda nedostatok pamäte a nový operátor sa pokúsi alokovať pamäť, bude to viesť k zlyhaniu nového operátora. Ak nový operátor nepridelí pamäť, vyhodí výnimku a ak váš kód nedokáže túto výnimku spracovať, program sa ukončí nezvyčajne.

Pamäť pridelenú novým operátorom sa môže uvoľniť pomocou operátora vymazania. Nový operátor skracuje čas vykonávania, pretože je to operátor, nie funkcia.

Definícia malloc ()

malloc () je funkcia, ktorá sa používa na pridelenie požadovaného množstva pamäte na haldu. Metóda vracia ukazovateľ typu „void“, ktorý je ďalej, typu cast, aby sa ukazovateľ dostal do pamäte určeného typu a tento ukazovateľ na pamäť sa priradí referenčnej premennej. Funkcia malloc () je podobná novému operátorovi v jazyku C ++, pretože sa používa na dynamické prideľovanie pamäte. Malloc () je štandardná funkcia knižnice. Syntax funkcie malloc () je takáto:

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

V tomto prípade „typ“ označuje dátový typ premennej, pre ktorú musí byť vyhradená pamäť. Názov premennej je názov referenčnej premennej, ku ktorej bude priradený ukazovateľ vrátený pomocou malloc (). (Typ *) popisuje obsadenie typu na získanie ukazovateľa na pamäť v konkrétnom type. Veľkosť () popisuje malloc (), že je požadovaná veľkosť pamäte.

Malloc () vyžaduje odlievanie typov, pretože ukazovateľ vrátený malloc () má neplatný typ, takže na priradenie typu k ukazovateľu sa vyžaduje odlievanie typov. Sizeof () je vyžadovaná, pretože funkcia malloc () prideľuje nespracovanú pamäť, preto je potrebné povedať funkcii malloc (), akú veľkosť pamäte musí prideliť. Ak alokovaná pamäť nie je dostatočná, je možné zmeniť jej veľkosť alebo ju prerozdeliť pomocou realloc ().

Funkcia malloc () alokuje pamäť na haldu. V prípade, že je v halde nedostatok pamäte, funkcia malloc () vráti ukazovateľ NULL. Preto by sa referenčná premenná obsahujúca ukazovateľ vrátený malloc () mala skontrolovať pred tým, ako sa použije, inak môže viesť k zlyhaniu systému.

Pamäť pridelená funkciou malloc () je pridelená pomocou free (). Pretože volanie funkcie vedie k réžii, malloc () vyžaduje viac času na vykonanie.

  1. Nový operátor je konštrukcia zavedená v C ++ a používaná v Java, C #, atď. Na druhej strane malloc () je štandardná funkcia knižnice, ktorá sa nachádza iba v jazyku C a podporuje ju C ++.
  2. Nový operátor prideľuje dostatok pamäte pre objekt špecifikovaného typu, takže nevyžaduje operátora veľkosti. Na druhej strane funkcia malloc () vyžaduje od operátora sizeof (), aby informoval túto funkciu, akú veľkosť pamäte musí prideliť.
  3. Nový operátor môže počas deklarácie zavolať konštruktora objektu. Na druhej strane funkcia malloc () nemôže volať konštruktora.
  4. Operátor „nový“ by mohol byť preťažený, ale malloc () nemohol.
  5. Ak nový operátor nepridelí pamäť, vyvolá výnimku, ktorú musí spracovať kód, inak sa program ukončí. Na druhej strane funkcia malloc () vráti ukazovateľ NULL, ak zlyhá pri alokácii pamäte. Ak sa ukazovateľ použije bez kontroly, bude to mať za následok zlyhanie systému.
  6. Pamäť pridelenú pomocou nového operátora môže byť pridelená pomocou 'vymazať'. Na druhej strane, pamäť pridelená pomocou funkcie malloc () môže byť pridelená pomocou free ().
  7. Po pridelení pamäte pomocou nového operátora už nie je možné zmeniť jej veľkosť. Na druhej strane pamäť pridelená pomocou funkcie malloc () môže byť prerozdelená (zmenená veľkosť) pomocou funkcie realloc ().
  8. Čas vykonávania nového je kratší v porovnaní s malloc (), pretože malloc je funkciou a nový je konštrukt.

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 ().