Ajánlott, 2024

Szerkesztő Választása

Az új és a malloc közötti különbség ()

Az új és a malloc () mindkettőt a memória dinamikus elosztására használják. Bár az új és a malloc () sokféle kontextusban különbözik. Az elsődleges különbség az új és a malloc () között az, hogy az új, a konstrukcióként használt operátor. Másrészről a malloc () egy standard könyvtárfunkció, amelyet a memória futtatására használnak. A többi különbség az alábbiakban az összehasonlítási táblázatban található:

Összehasonlító táblázat

Az összehasonlítás alapjaújmalloc ()
NyelvAz ú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ípushozA malloc megköveteli, hogy a sizeof operátor megismerje, milyen memóriaméretet kell megadnia.
KonstruktőrAz új operátor hívhatja az objektum konstruktorát.malloc () egyáltalán nem hívhat egy konstruktort.
inicializálásAz ú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ésAz új operátor túlterhelhető.A malloc () soha nem lehet túlterhelt.
HibaHiba esetén az operátor új kivételt tesz.Hiba esetén a malloc () egy NULL értéket ad vissza.
felszabadításaA 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ásAz ú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ásAz 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 ()

  1. Az új operátor a C ++-ban bevezetett és Java, C # stb. Által használt konstrukció.
  2. 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.
  3. 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.
  4. Az „új” operátor túlterhelhető, de a malloc () nem tudta.
  5. 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.
  6. 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 ().
  7. 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).
  8. 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.

Top