Különbség az új és a malloc között ()

Szerző: Laura McKinney
A Teremtés Dátuma: 1 Április 2021
Frissítés Dátuma: 5 Lehet 2024
Anonim
Különbség az új és a malloc között () - Technológia
Különbség az új és a malloc között () - Technológia

Tartalom


Az új és a malloc () egyaránt a memória dinamikus elosztására szolgálnak. Bár az új és a malloc () sok szempontból különbözik egymástól. Az elsődleges különbség az új és a malloc () között az új az operátor, konstrukcióként használva. Másrészt a malloc () egy standard könyvtári funkció, amelyet memória elosztására használnak futási időben. A közöttük levő többi különbséget az alábbiakban tárgyaljuk az összehasonlító táblázatban:

  1. Összehasonlító táblázat
  2. Meghatározás
  3. Főbb különbségek
  4. Következtetés

Összehasonlító táblázat

Az összehasonlítás alapjaújmalloc ()
NyelvAz új operátor a C ++, a Java és a C # sajátos jellemzője. A malloc () függvény a C egyik jellemzője.
TermészetAz "új" egy operátor.A malloc () egy függvény.
mérete( )Az újnak nincs szüksége az operátor méretére, mivel nincs elég memória az adott típushoz A malloc megköveteli a operátor méretétől, hogy tudja, hogy milyen memória méretét kell kiosztania.
Konstruktőr Az új operátor meghívhatja egy objektum építőjét.A malloc () egyáltalán nem hívhat fel kivitelezőt.
inicializálásAz új operátor inicializálhat egy objektumot, miközben memóriát rendel hozzá.A memória inicializálása nem sikerült mallocban.
A túlterhelés Az új kezelő túlterhelhető.A malloc () soha nem lehet túlterhelt.
KudarcHiba esetén az új kezelő kivételt tesz.Hiba esetén a malloc () NULL értéket ad vissza.
felszabadításaA memória elosztása új, üzlethelyiség szerint, a "törlés" segítségével.A malloc () memóriaelosztását egy ingyenes () függvény felhasználásával osztják el.
ÚjraelosztásAz új operátor nem osztja újra a memóriát.A malloc () által kiosztott memória újraelosztható a realloc () használatával.
VégrehajtásAz új operátor lerövidíti a végrehajtási időt.A malloc () végrehajtásához több idő szükséges.


Az új meghatározása

Az irányító új egy memóriaelosztó operátor, amely dinamikusan osztja el a memóriát. Az új operátor kiosztja a memóriát a halomban, és visszatér annak a memórianek a kezdőcímét, amelyet egy referenciaváltozóhoz rendelt. Az új operátor hasonló a C-ben szereplő malloc () -hoz. A C ++ fordító azonban kompatibilis a malloc () -mal, de a legjobb az új operátor használata, mivel bizonyos előnyei vannak a malloc () -hoz képest. Az új operátor szintaxisa a következő:

type változó_neve = új típus (paraméter_lista);

A „type” itt a változó adattípusát jelöli, amelynek a memóriát el kell rendelni. A „változó_neve” szó a referenciaváltozónak adott név, amely a mutatót a memóriában tartja. Az itt szereplő zárójel meghatározza a kivitelező hívását. A_paraméter azon értékek listája, amelyeket átadnak a konstruktornak az újonnan épített objektum inicializálásához.


Az új operátor elegendő memóriát foglal le egy adott objektumhoz. Ezért nem igényel sizeof () operátort, és nem is szükséges a memória átméretezése, mint például a malloc (), amely az realloc () -ot használja a memória újraelosztásához. Az új operátor konstrukció; meghívja egy objektum építőjét, miközben a deklarációt általában használja az objektum inicializálására.

Tudjuk, hogy az új operátor kiosztja a memóriát a halomban, és a halom mérete korlátozott. Tehát, ha a halomból hiányzik a memória, és az új operátor megpróbálja allokálni a memóriát, az az új operátor meghibásodásához vezet. Ha az új operátor nem osztja el a memóriát, akkor kivételt hoz, és ha a kódja nem képes kezelni ezt a kivételt, a program rendellenesen áll le.

Az új operátor által kiosztott memória a törlési operátor segítségével felszabadítható. Az új operátor lekapcsolja a végrehajtási időt, mivel operátor, nem funkció.

Meghatározása malloc ()

A malloc () egy olyan funkció, amelyet arra használunk, hogy a kért memóriamennyiséget elosztjuk a halomon. A módszer az „void” típusú mutatót adja vissza, amely tovább van, írja be a cast parancsot, hogy egy mutatót a megadott típusú memóriához kapjon, és ezt a mutatót a memóriához egy referenciaváltozóhoz rendeli. A malloc () függvény hasonló a C ++ új operátorához, mivel azt a memória dinamikus elosztására használják. A malloc () egy standard könyvtári funkció. A malloc () függvény szintaxisa a következő:

típus változó_neve = (típus *) malloc (méret méret (típus));

Itt a „type” azt a változótípust jelöli, amelynek a memóriát el kell rendelni. A_név változó annak a referenciaváltozónak a neve, amelyhez a malloc () által visszaadott mutatót hozzárendeljük. A (típus *) leírja a típus-leadást, hogy egy adott típussal mutatót kapjon a memóriába. A sizeof () azt írja le, hogy a malloc () milyen memória méretű.

A malloc () típusöntést igényel, mivel a malloc () által visszaadott mutató érvénytelen típusú, tehát ahhoz, hogy egy típust hozzárendeljen az mutatóhoz, típusöntés szükséges. A (of) méretre azért van szükség, mert a malloc () függvény nyers memóriát allokál, tehát meg kell mondanunk a malloc () függvénynek, hogy milyen memória méretét kell kiosztania. Ha a lefoglalt memória nem elegendő, akkor átméretezhető vagy újrahelyezhető a realloc () használatával.

A malloc () függvény memóriát oszt fel a halomon. Ha a halomnak nincs memóriája, akkor a malloc () függvény NULL mutatót ad vissza. Ezért a malloc () által visszaadott mutatót tartalmazó referenciaváltozót használat előtt ellenőrizni kell, különben ez rendszerösszeomláshoz vezethet.

A malloc () függvény által kiosztott memória a free () használatával foglalkozik. Mivel a függvényhívás felülírást eredményez, a malloc () több időt igényel a végrehajtáshoz.

  1. Az új operátor egy olyan konstrukció, amelyet a C ++ bevezetett, és Java, C #, stb. Használtak. Másrészt a malloc () egy szokásos könyvtári függvény, amelyet csak C nyelven találunk meg, és amelyet a C ++ támogat.
  2. Az új operátor elegendő memóriát foglal le egy meghatározott típusú objektumhoz, tehát nem szükséges méretű operátor. Másrészről, a malloc () függvény megköveteli a sizeof () operátor számára, hogy tudassa a funkcióval, hogy milyen memóriaméretet kell kiosztania.
  3. Az új üzemeltető felhívhatja az objektum építőjét, miközben deklarálja. Másrészt a malloc () függvény nem hívhatja meg az építőt.
  4. Az „új” operátor túlterhelt lehet, de a malloc () nem.
  5. Ha az új operátor nem osztja le a memóriát, akkor kivételt vet fel, amelyet a program által lezárt kóddal kell kezelni. Másrészről, a malloc () függvény NULL mutatót ad vissza, ha nem sikerül allokálni a memóriát. Ha a mutatót ezen ellenőrzés nélkül használja, rendszer összeomláshoz vezet.
  6. Az új operátorral kiosztott memória a „törlés” használatával elosztható. Másrészről, a malloc () függvénnyel allokált memória elosztható az free () használatával.
  7. Miután a memóriát új operátorral osztották ki, amúgy sem lehet átméretezni. Másrészről, a malloc () függvénnyel allokált memória újraelosztható (átméretezhető) az realloc () függvény használatával.
  8. Az new végrehajtási ideje rövidebb a malloc () -hoz képest, mivel a malloc egy függvény, az új pedig egy konstrukció.

Következtetés:

A malloc () függvény a régi módszer a memória dinamikus elosztásához. Manapság az új operátort használják a memória elosztására futás közben, mivel bizonyos előnyei vannak a malloc-hoz képest ().