Suositeltava, 2024

Toimituksen Valinta

Uuden ja mallocin välinen ero ()

Uutta ja malloc () molempia käytetään dynaamisesti muistin jakamiseen. Vaikka uusi ja malloc () ovat erilaisia ​​monissa yhteyksissä. Ensisijainen ero uuden ja malloc (): n välillä on se, että uusi on operaattori, jota käytetään rakenteena. Toisaalta malloc () on standardi kirjastotoiminto, jota käytetään muistin varaamiseen ajonaikaisesti. Muita eroja niiden välillä käsitellään jäljempänä vertailukaaviossa:

Vertailukaavio

Vertailun perusteetUusimalloc ()
KieliUusi operaattori on C ++: n, Java: n ja C #: n erityispiirre.Funktio malloc () on C: n ominaisuus.
luonto"uusi" on operaattori.malloc () on toiminto.
koko( )uusi ei tarvitse kokoa operaattoria, koska siinä on riittävästi muistia tietyntyyppisillemalloc edellyttää, että kokoa vastaava operaattori tietää, mitä muistikokoa sen on annettava.
RakentajaUusi operaattori voi soittaa objektin rakentajalle.malloc () ei voi lainkaan soittaa rakentajalle.
alustusUusi operaattori voi alustaa objektin samalla, kun se jakaa muistia siihen.Muistin alustamista ei voitu tehdä mallocissa.
YlikuormitusUusi käyttäjä voidaan ylikuormittaa.Mallocia () ei voi koskaan ylikuormittaa.
vikaVirheessä operaattori heittää poikkeuksen.Jos epäonnistui, malloc () palauttaa NULL-arvon.
vapautuksenMuistin jakaminen uusilla, jaettuina "poistamalla".Malloc (): n muisti allokoidaan vapaalla () funktiolla.
uudelleenkohdentaminenUusi operaattori ei jaa muistia uudelleen.Mallocin () jakama muisti voidaan jakaa uudelleen käyttäen realloc (): ta.
suoritusOperaattori uusi leikkaa suoritusajan.Malloc () vaatii enemmän aikaa toteutukseen.

Uuden määritelmä

Uusi operaattori on muistinjako-operaattori, joka allokoi muistin dynaamisesti. Uusi operaattori allokoi muistin kasaan ja palauttaa sen muistin aloitusosoitteen, joka on osoitettu viitemuuttujalle. Uusi operaattori on samanlainen kuin malloc () C: ssä. C ++-kääntäjä on kuitenkin yhteensopiva malloc: n () kanssa, mutta on parasta käyttää uutta operaattoria, koska sillä on tiettyjä etuja malloc (): een nähden. Uuden operaattorin syntaksi on seuraava:

 kirjoita muuttuja_nimi = uusi tyyppi (parametri_luettelo); 

Tässä "tyyppi" tarkoittaa sen muuttujan tietotyyppiä, jolle muisti on jaettava. Sana "muuttuja_nimi" on nimi, joka annetaan viitemuuttujalle, joka pitää osoitinta muistiin. Suluissa tässä määritellään rakentajan kutsuminen. Parametrilista on luettelo arvoista, jotka siirretään konstruktorille vasta rakennetun objektin alustamiseksi.

Uusi operaattori allokoi tarpeeksi muistia, joka tarvitaan tietyn tyyppiselle objektille. Näin ollen se ei vaadi sizeof () -operaattoria eikä sitä tarvitse muuttaa muistin kuten malloc (), joka käyttää realloc () muistia uudelleen. Uusi operaattori on rakenne; se kutsuu objektin rakentajaa ilmoituksen yhteydessä, jota käytetään yleensä objektin alustamiseen.

Tiedämme, että uusi operaattori jakaa muistin kasaan ja kasan koko on rajoitettu. Jos siis kasa on poissa muistista ja uusi operaattori yrittää jakaa muistin, se johtaa uuden operaattorin vikaantumiseen. Jos uusi operaattori ei pysty varaamaan muistia, se heittää poikkeuksen, ja jos koodi ei pysty käsittelemään tätä poikkeusta, ohjelma päättyy epänormaalisti.

Uuden operaattorin käyttämä muisti voidaan vapauttaa poistotoiminnolla. Uusi operaattori katkaisee suoritusajan, koska se on operaattori, ei toiminto.

Mallocin määritelmä ()

Malloc () on toiminto, jota käytetään varaamaan haluttu määrä muistia kasaan. Menetelmä palauttaa "tyhjän" tyypin osoittimen, joka on edelleen, kirjoita valettu saadaksesi osoitin määritetyn tyypin muistiin ja tämä osoitin muistiin on osoitettu referenssimuuttujalle. Malloc () -toiminto on samanlainen kuin uusi operaattori C ++: ssa, koska sitä käytetään dynaamisesti muistin varaamiseen. Malloc () on tavallinen kirjastotoiminto. Malloc () -funktion syntaksi on seuraava:

 tyyppi muuttuja_nimi = (tyyppi *) malloc (sizeof (type)); 

Tässä "tyyppi" ilmaisee sen muuttujan tietotyypin, jolle muisti on jaettava. Muuttujan_nimi on sen referenssimuuttujan nimi, johon malloc () palautettu osoitin osoitetaan. (Tyyppi *) kuvaa tyypin valintaa saadaksesi osoitin tietylle muistille. Koko () kuvaa mallocia (), että mitä muistikokoa tarvitaan.

Malloc () vaatii tyyppisen valun, koska mallocin () palauttama osoitin on mitätön, joten tyypin antamiseksi osoitinta varten tarvitaan tyyppinen valu. Koko () tarvitaan, koska funktio malloc () jakaa täten raakamuistin, joten on tarpeen kertoa malloc () -toiminnolle, mitä muistin koon sen on määrä jakaa. Jos allokoitu muisti ei riitä, sitä voidaan muuttaa tai jakaa uudelleen reaaliaikaisen () avulla.

Malloc () -toiminto jakaa muistin kasaan. Siinä tapauksessa, että kasa on poissa muistista, malloc () -toiminto palauttaa NULL-osoittimen. Mallocin () palauttamaa osoitinta sisältävä referenssimuuttuja on siis tarkistettava ennen sen käyttöä, muuten se voi johtaa järjestelmän kaatumiseen.

Malloc () -toiminnon käyttämä muisti sijoitetaan vapaaksi (). Koska funktion puhelu johtaa yläpuolelle, malloc () vaatii enemmän aikaa toteutukseen.

Keskeiset erot uuden ja mallocin välillä ()

  1. Uusi operaattori on konstruktio, joka on otettu käyttöön C ++: ssa ja jota käytetään Java, C # jne. Toisaalta malloc () on tavallinen kirjastotoiminto, joka löytyy vain C-kielestä ja jota C ++ tukee.
  2. Uusi operaattori allokoi riittävästi muistia määritetyn tyypin objektille, joten se ei vaadi mitoitusoperaattoria. Toisaalta malloc () -toiminto edellyttää, että sizeof () -operaattori antaa toiminnolle tietää, mitä muistikokoa sen on annettava.
  3. Uusi operaattori voi soittaa objektin rakentajalle ilmoituksen yhteydessä. Toisaalta malloc () -toiminto ei voi kutsua rakentajaa.
  4. Operaattori "uusi" voitaisiin ylikuormittaa, mutta malloc () ei voinut.
  5. Jos uusi operaattori ei pysty varaamaan muistia, se heittää poikkeuksen, jota koodin tulee käsitellä muussa tapauksessa, kun ohjelma päättyy. Toisaalta malloc () -toiminto palauttaa NULL-osoittimen, jos se ei pysty varaamaan muistia. Jos osoitinta käytetään tarkistamatta tätä, se johtaa järjestelmän kaatumiseen.
  6. Uuden operaattorin avulla varattua muistia voidaan sijoittaa "poistamalla". Toisaalta malloc () -toiminnolla varattu muisti voidaan jakaa vapaasti ().
  7. Kun muisti on jaettu uudella operaattorilla, sitä ei voi muuttaa. Toisaalta malloc () -toiminnolla varattu muisti voidaan jakaa uudelleen (muuttaa) reaaliaikaisella () funktiolla.
  8. Uuden suoritusaika on vähemmän kuin malloc (), koska malloc on funktio ja uusi on rakenne.

johtopäätös:

Malloc () -toiminto on vanha tapa dynaamisesti jakaa muistia. Nykyään uutta operaattoria käytetään varaamaan muistia ajonaikaisesti, koska sillä on tiettyjä etuja malloc (): een nähden.

Top