Különbség az új és a malloc között ()
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:
- Összehasonlító táblázat
- Meghatározás
- Főbb különbségek
- Következtetés
Összehasonlító táblázat
Az összehasonlítás alapja | új | malloc () |
---|---|---|
Nyelv | Az ú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észet | Az "ú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ás | Az ú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. |
Kudarc | Hiba esetén az új kezelő kivételt tesz. | Hiba esetén a malloc () NULL értéket ad vissza. |
felszabadítása | A 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ás | Az új operátor nem osztja újra a memóriát. | A malloc () által kiosztott memória újraelosztható a realloc () használatával. |
Végrehajtás | Az ú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.
- 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.
- 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.
- 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.
- Az „új” operátor túlterhelt lehet, de a malloc () nem.
- 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.
- 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.
- 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.
- 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 ().