Összehasonlító táblázat
Az összehasonlítás alapja | új | malloc () |
---|---|---|
Nyelv | Az új operátor a C ++, Java és C # speciális jellemzője. | A malloc () függvény a C jellemzője. |
Természet | "új" egy operátor. | A malloc () függvény. |
mérete( ) | az újnak nem kell a méretû operátornak adnia elegendõ memóriát az adott típushoz | A malloc megköveteli, hogy a sizeof operátor megismerje, milyen memóriaméretet kell megadnia. |
Konstruktőr | Az új operátor hívhatja az objektum konstruktorát. | malloc () egyáltalán nem hívhat egy konstruktort. |
inicializálás | Az új operátor inicializálhat egy objektumot, miközben a memóriát hozzárendeli. | A memória inicializálása nem történt meg a malloc-ban. |
A túlterhelés | Az új operátor túlterhelhető. | A malloc () soha nem lehet túlterhelt. |
Hiba | Hiba esetén az operátor új kivételt tesz. | Hiba esetén a malloc () egy NULL értéket ad vissza. |
felszabadítása | A memória elosztása új, „törléssel” osztva. | A malloc () által biztosított memóriaelosztást egy szabad () függvény segítségével osztjuk el. |
Újraelosztás | Az új operátor nem osztja át a memóriát. | A malloc () által kiosztott memóriát a realloc () segítségével lehet átcsoportosítani. |
Végrehajtás | Az operátor új vágási időt vesz igénybe. | A malloc () több időt igényel a végrehajtáshoz. |
Új meghatározás
Az új operátor egy memóriaelosztó operátor, amely dinamikusan osztja fel a memóriát. Az új operátor osztja a memóriát a halomban, és visszaadja annak a memóriának a kezdőcímét, amely egy referencia változóhoz van hozzárendelve. Az új operátor hasonlít a Ccoc-hoz (C), de a C ++ fordító kompatibilis a malloc-szal (), de a legjobb, ha új operátort használ, mivel bizonyos előnyökkel rendelkezik a malloc () ellen. Az új operátor szintaxisa a következő:
type_name = new type (paraméter_list);
Itt a „típus” a változó adattípusát jelöli, amelyre a memóriát ki kell osztani. A „változó_neve” szó az a név, amelyet a referencia-változónak a memóriába mutató mutatója adott. A zárójelben a konstruktor hívása szerepel. A paraméter_lista azoknak az értékeknek a listája, amelyeket átadnak a konstruktornak az újonnan épített objektum inicializálására.
Az új operátor elegendő memóriát rendel egy adott típusú objektumhoz. Ezért nem igényel méretméretű () operátort, és nem igényli a memória, mint a malloc () átméretezését, ami a memória újbóli elosztását használja. Az új operátor egy konstrukció; az objektum konstruktort hívja a deklaráció során, amelyet általában az objektum inicializálására használnak.
Tudjuk, hogy az új operátor osztja a memóriát a halomban, és a halom mérete korlátozott. Tehát, ha a halom nincs a memóriából, és az új operátor megpróbálja kiosztani a memóriát, akkor az új operátor hibájához vezet. Ha az új operátor nem osztja fel a memóriát, akkor kivételt dob, és ha a kódja nem tudja kezelni ezt a kivételt, a program abnormálisan megszűnik.
Az új operátor által kiosztott memória felszabadítható a törlés operátor segítségével. Az új operátor leállítja a végrehajtási időt, mivel egy operátor, nem pedig funkció.
A malloc meghatározása ()
A malloc () egy olyan függvény, amelyet a kért memória mennyiségének kiosztására használnak. Az eljárás visszaadja a „void” típusú mutatót, amely további, a leadott, hogy egy adott típusú memóriába mutató mutatót kapjon, és ez a mutató a memóriához egy referencia változóhoz van hozzárendelve. A malloc () függvény hasonló a C ++ új operátorához, mivel dinamikusan osztja fel a memóriát. A malloc () egy standard könyvtárfunkció. A malloc () függvény szintaxisa a következő:
type_name = (* típus) malloc típus (sizeof (type));
Itt a „típus” a változó adattípusát jelöli, amelyre a memóriát meg kell osztani. A változó_neve annak a referencia változónak a neve, amelyhez a malloc () visszaadott mutatója lesz hozzárendelve. A (* típus) leírja a típusválasztást, hogy egy adott típusú memóriára mutató mutatót kapjon. A méret () leírja a malloc () -t, hogy milyen memóriaméret szükséges.
A malloc () típusválasztást igényel, mert a malloc () visszajuttatott mutatója üres, így egy típust hozzárendelni a mutatóhoz, típusválasztás szükséges. A méret (()) szükséges, mert a malloc () függvény egy nyers memóriát rendel, ezért meg kell mondania a malloc () függvénynek, hogy milyen memóriaméretet kell elosztania. Ha a kiosztott memória nem elégséges, átméretezhető vagy átcsoportosítható a realloc () segítségével.
A malloc () függvény a memóriát osztja fel a kupacra. Abban az esetben, ha a halom nincs a memóriából, akkor a malloc () függvény NULL mutatót ad vissza. Ezért a malloc () által visszaadott mutatót tartalmazó referencia változót ellenőrizni kell használat előtt, különben a rendszer összeomlik.
A malloc () függvény által kiosztott memória szabadon () keresztül van elosztva. Ahogy a függvényhívás a felső vezetéshez vezet, a malloc () több időt igényel a végrehajtáshoz.
Az új és a malloc közötti legfontosabb különbségek ()
- Az új operátor a C ++-ban bevezetett és Java, C # stb. Által használt konstrukció.
- Az új operátor elegendő memóriát rendel a meghatározott típusú objektumhoz, így nem igényel méretező operátort. Másrészről a malloc () függvény megköveteli, hogy a sizeof () operátor adja meg a függvényt, hogy milyen memóriaméretet kell elosztania.
- Az új üzemeltető a bejelentés során felhívhatja az objektum építőjét. Másrészt a malloc () függvény nem hívhatja a konstruktort.
- Az „új” operátor túlterhelhető, de a malloc () nem tudta.
- Ha az új operátor nem tudja kiosztani a memóriát, kivételt dob, amelyet a kódnak kell kezelnie, a program pedig leáll. Másrészről a malloc () függvény NULL mutatót ad vissza, ha nem tud memóriát kiosztani. Ha a mutatót ennek ellenőrzése nélkül használják, akkor a rendszer összeomlik.
- Az új operátorral kiosztott memóriát a „törlés” segítségével lehet elosztani. Másrészt a malloc () függvénnyel kiosztott memória szabadon ().
- Miután a memóriát egy új operátor segítségével osztották ki, az nem változtatható meg. Másrészt a malloc () függvénnyel kiosztott memóriát realloc () függvény segítségével át lehet osztani (átméretezni).
- Az új végrehajtási ideje kevesebb, mint a malloc (), mert a malloc egy függvény, és az új egy konstrukció.
Következtetés:
A malloc () függvény a régi mód a memória dinamikus kiosztására. Manapság az új operátort arra használják, hogy a memóriát futás közben hozzárendelje, mert bizonyos előnyökkel rendelkezik a malloc () ellen.