Malloc on C-kielen ominaisuus, kun taas uusi on perusominaisuus C++:ssa. Malloc on pohjimmiltaan vakiotoiminto, kun taas new on operaattori. Mallocia ei tulisi käyttää C++:ssa ilman olennaista syytä. New/delet ei saa koskaan sekoittaa malloc/free-muotoon. Toisin kuin malloc, new ei tarvitse operaattorin kokoa.
Malloc vs New
Suurin ero malloc():n ja new():n välillä on, että edellinen on tavallinen C-funktio ja jälkimmäinen on operaattori, jota voidaan käyttää vain C++:ssa. Mallocia voidaan ja pitäisi käyttää vain C++:ssa, kun siihen on jokin hyvä syy. Uusi sallii ohituksen, mutta malloc ei salli sitä laillisesti.
Malloc edellyttää operaattorin tarkan koon tuntemista selvittääkseen, mikä muistin koko sille on varattava. Malloc ei myöskään pysty soittamaan rakentajalle. Se palaa NULL-tilaan, kun se havaitsee, että muistista on pulaa.
Uusi operaattori ei tarvitse ennakkotietoa operaattorin tarkasta koosta määrittääkseen muistipaikan. Uusi operaattori voi myös soittaa objektin rakentajalle. Sen tiedetään tuovan esiin poikkeuksen, kun muistista on pulaa.
Mallocin ja uuden vertailu taulukkomuodossa
Vertailuparametrit | Malloc | Uusi |
Paikka kielessä | Mallocia käytetään useammin C:ssä. Harvemmin sitä käytetään C++:ssa. | Uutta käytetään vain C++:ssa. |
Palauttaa | Se palaa tyhjyyteen. | Uusi palaa oikeaan tyyppiin. |
Koko | Mallocissa koko on laskettava manuaalisesti | Uudessa kääntäjä laskee tarvittavan kääntäjän koon |
Ohittava | Malloc-toimintoa ei voi ohittaa laillisesti. | Uusi operaattori tarjoaa mahdollisuuden ohittaa. |
Tyyppi | Malloc on vakio C-toiminto. | Se käyttää operaattoreita, kuten ==, += jne. |
Käyttäytyminen, kun muisti ei riitä | Malloc palaa NULL-tilaan, kun muistista on pulaa. | Uusi tuo esiin poikkeuksen muistin puutteen aikana. |
Jakaminen | Malloc() tulee sovittaa yhteen free() kanssa. | New() tulee vastata delete(). |
Varaa muistia varten | Melkein kaikki. | Vain taulukoille, objekteille ja rakenteille. |
Mikä on Malloc?
Malloc() on C:n standardikirjastofunktio, joka tarkoittaa muistin varausta. Sitä käytetään dynaamisesti varaamaan tietyn kokoinen muistilohko. Muistin koko on varattu tavuina. Se yleensä palauttaa tyhjän tyyppisen osoittimen, koska se sisältää jonkin verran roskaarvoa. Se ei alusta muistia suorituksen aikana. Malloc-funktiota tulisi käyttää vain C++:ssa, kun se on erittäin tarpeellista, muuten sen käyttö tulisi rajoittaa vain C:hen. Kun malloc havaitsee muistin puutteen, se palaa välittömästi NULL-tilaan. Se ei suorita muistin alustusta. Se sisältää 2 argumenttia. Malloc() on aina sovitettava yhteen free():n kanssa. Mallocin muistin koko on laskettava manuaalisesti. Muistin koon allokoimiseksi tarvitaan aiempaa tietoa operaattorin koosta. Se ei pysty kutsumaan objektin rakentajaa. Malloc-funktiota voidaan käyttää muistin varaamiseen lähes kaikkeen. Malloc-toiminto ei salli laillista ohittamista. Malloc toimii hitaammin kuin uusi operaattori C++:ssa, koska operaattori on aina nopeampi kuin funktio.
Syntaksi:- ptr = (castType*) malloc(koko);
Mitä uutta?
New on C++:n operaattori, jota ei voi käyttää C:ssä. Uusi operaattori voi kutsua objektin konstruktoria ja alustaa muistin. Konstruktori kutsutaan vasta, kun muisti on varattu. Muistin koon laskee kääntäjä. Se palaa oikeaan tyyppiin. Se voi käyttää operaattoreita, kuten ==, += jne. Uusi operaattori varaa muistia vain taulukoille, objekteille ja rakenteille. C++:ssa uutta operaattoria käytetään esittämään pyyntö muistin varaamisesta kasaan. Edellyttäen, että muistia on riittävästi, uusi operaattori alustaa sen ja toimii sen jälkeen palauttaakseen juuri varatun ja muodostetun muistin osoitinmuuttujaan. New() on aina yhdistettävä delete() kanssa. Tätä operaattoria käytetään dynaamiseen muistin varaamiseen, objektien rakentamiseen ja tuhoamiseen. Muisti on varattu objekteille poolista, joka tunnetaan nimellä free store. Se toimii paljon nopeammin kuin malloc, koska se on operaattori eikä funktio.
Syntaksi:- osoitinmuuttuja = uusi tietotyyppi;
Tärkeimmät erot Mallocin ja uuden välillä
Johtopäätös
Malloc() on C:n vakiofunktio, jota käytetään tarvittaessa myös C++:ssa. New() on operaattori, jonka käyttö on rajoitettu vain C++:aan. Malloc():n on sovittava yhteen free()- ja new()-komennolla delete(), jotta se toimisi oikein. Näitä kahta ei pitäisi koskaan vaihtaa keskenään. Uusi on paljon edistyneempi kuin malloc, koska se ei vaadi aiempaa tietoa operaattorin koosta varaamaan tilaa muistille, mutta malloc-funktio vaatii sen. Malloc-funktio ei voi kutsua objektin rakentajaa, jolla uusi operaattori pystyy siihen. Malloc-funktion tiedetään varaavan muistia melkein kaikelle, mutta uusi operaattori varaa muistia vain taulukoille, objekteille ja rakenteille C++:ssa. Vaikka malloc on keskimäärin paljon nopeampi kuin uusi, nopeus voi vaihdella yksittäisen kutsun mukaan. Kun muistista on pulaa, malloc palaa NULL-tilaan, kun taas uusi antaa virheen poikkeuksen.