Ero uuden ja malloc: n välillä ()

Kirjoittaja: Laura McKinney
Luomispäivä: 1 Huhtikuu 2021
Päivityspäivä: 5 Saattaa 2024
Anonim
Ero uuden ja malloc: n välillä () - Tekniikka
Ero uuden ja malloc: n välillä () - Tekniikka

Sisältö


Uutta ja malloc () - käytetään molemmille muistin varaamiseksi. Uusi ja malloc () eroavat kuitenkin monista haitoista. Ensisijainen ero uuden ja malloc (): n välillä on Uusi on operaattori, jota käytetään rakenteena. Toisaalta malloc () on vakiokirjasto-toiminto, jota käytetään muistin allokointiin suorituksen aikana. Muista eroista niiden välillä keskustellaan jäljempänä vertailutaulussa:

  1. Vertailutaulukko
  2. Määritelmä
  3. Keskeiset erot
  4. johtopäätös

Vertailutaulukko

Vertailun perusteetUusimalloc ()
KieliOperaattori uusi on C ++: n, Java: n ja C #: n erityinen ominaisuus. Toiminto malloc () on C: n ominaisuus.
luonto"uusi" on operaattori.malloc () on funktio.
koko( )uusi ei tarvitse operaattorin kokoa, koska siinä on tarpeeksi muistia tietylle tyypille malloc vaatii operaattorin koon tiedostamaan, mitä muistikokoa sillä on käytettävä.
Rakentaja Uusi operaattori voi soittaa kohteen rakentajalle.malloc () ei voi lainkaan soittaa rakentajalle.
alustusUusi operaattori voisi alustaa objektin varaamalla sille muistia.Muistin alustamista ei voitu suorittaa malloc-tilassa.
Ylikuormitus Uusi operaattori voi olla ylikuormitettu.Malloc (): ta ei voi koskaan ylikuormittaa.
vikaEpäonnistumisen yhteydessä uusi operaattori heittää poikkeuksen.Epäonnistumisen yhteydessä malloc () palauttaa NULL-arvon.
vapautuksenMuistin allokointi uusien, kauppaan kohdistettujen "poista" -sovellusten avulla.Malloc (): n muistin allokointi jaetaan ilmaisella () -toiminnolla.
uudelleenkohdentaminenUusi operaattori ei siirrä muistia uudelleen.Malloc (): n allokoima muisti voidaan jakaa uudelleen käyttämällä realloc ().
suoritusOperaattori uusi lyhentää suoritusaikaa.Malloc () vaatii enemmän aikaa suorittamiseen.


Määritelmä uusi

Operaattori Uusi on muistin allokointioperaattori, joka varaa muistin dynaamisesti. Uusi operaattori allokoi muistin kasassa ja palauttaa muistin lähtöosoitteen, joka on osoitettu referenssimuuttujalle. 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:

tyyppi muuttuja_nimi = uusi tyyppi (parametriluettelo);

Tässä ”tyyppi” tarkoittaa muuttujan tietotyyppiä, jolle muisti on allokoitava. Sana ”muuttujan_nimi” on viitemuuttujalle annettu nimi, joka pitää osoittimen muistissa. Suluissa täsmennetään rakentajan kutsuminen. Parametriluettelo on luettelo arvoista, jotka välitetään rakentajalle vasta rakennetun objektin alustamiseksi.


Uusi operaattori varaa tarpeeksi muistia tietyn tyyppiselle kohteelle. Siksi se ei vaadi sizeof () -operaattoria eikä muistin koon muuttamista kuten malloc (), joka käyttää realloc () -sovellusta muistin uudelleen sijoittamiseen. Uusi operaattori on rakenne; se kutsuu esineen rakentajaa, kun taas ilmoitus, jota yleensä käytetään objektin alustamiseen.

Tiedämme, että uusi operaattori varaa kasassa olevan muistin ja kasan koko on rajoitettu. Joten jos kasassa ei ole muistia ja uusi operaattori yrittää varata muistia, se johtaa uuden operaattorin epäonnistumiseen. Jos uusi operaattori ei varaa muistia, se heittää poikkeuksen, ja jos koodisi ei pysty käsittelemään tätä poikkeusta, ohjelma päättyy epänormaalisti.

Operaattorin uuden allokoima muisti voidaan vapauttaa poisto-operaattorilla. Uusi operaattori katkaisee suoritusajan, koska se on operaattori, ei toiminto.

Määritelmä malloc ()

malloc () on toiminto, jota käytetään varaamaan vaadittu määrä muistia kasaan. Menetelmä palauttaa tyhjän tyyppisen osoittimen, joka on edelleen, kirjoita cast saadaksesi osoittimen tietyn tyyppiseen muistiin, ja tämä osoitin muistiin osoitetaan referenssimuuttujalle. Malloc () -toiminto on samanlainen kuin C ++: n uusi operaattori, koska sitä käytetään jakamaan muisti dynaamisesti. Malloc () on vakiokirjasto-toiminto. Malloc () -funktion syntaksi on seuraava:

tyyppi muuttuja_nimi = (tyyppi *) malloc (kokooformaatti (tyyppi));

Tässä ”tyyppi” osoittaa muuttujan tietotyypin, jolle muisti on varattava. Muuttujan_nimi on sen viitemuuttujan nimi, jolle mallocin () palauttama osoitin osoitetaan. (Tyyppi *) kuvaa tyyppivalua osoittimen saamiseksi tietyn tyyppiseen muistiin. Sizeof () kuvaa malloc (), mitä muistikokoa tarvitaan.

Malloc () vaatii tyyppivalua, koska malloc (): n palauttama osoitin on tyhjää tyyppiä, joten tyypin valintaa tarvitaan osoittimelle tyypin määrittämiseksi. Kokoaof () vaaditaan, koska funktio malloc () varaa raa'an muistin, joten vaaditaan kertomaan malloc () -toiminnolle, mitä muistikokoa sen on varattava. Jos allokoitu muisti ei ole riittävä, sen kokoa voidaan muuttaa tai uudelleen sijoittaa käyttämällä realloc () -sovellusta.

Malloc () -toiminto varaa muistin kasaan. Jos kasa on loppunut muistista, malloc () -toiminto palauttaa NULL-osoittimen. Siksi malloc (): n palauttama osoitin, joka sisältää osoittimen, tulisi tarkistaa ennen käyttöä, muuten se voi johtaa järjestelmän kaatumiseen.

Malloc () -toiminnon allokoima muisti jaetaan käyttämällä ilmaista (). Koska funktiokutsu johtaa yläpuolella, malloc () vaatii enemmän aikaa suorittamiseen.

  1. Uusi operaattori on rakenne, joka on otettu käyttöön C ++: ssa ja jota käytetään Java, C #, jne. Toisaalta malloc () on vakiokirjasto-toiminto, joka löytyy vain C-kieleltä ja jota tukee C ++.
  2. Uusi operaattori varaa tarpeeksi muistia tietyn tyyppiselle objektille, joten se ei vaadi operaattorin koon määrittämistä. Toisaalta malloc () -toiminto vaatii sizeof () -operaattoria ilmoittamaan toiminnolle, mikä muistikoko sen on varattava.
  3. Uusi operaattori voi soittaa esineen rakentajalle ilmoituksen tekemisen aikana. Toisaalta malloc () -toiminto ei voi kutsua rakentajaa.
  4. Operaattori 'uusi' voitiin ylikuormittaa, mutta malloc () ei voinut.
  5. Jos uusi operaattori ei varaa muistia, se vie poikkeuksen, joka on käsiteltävä koodilla, jonka muuten ohjelma lopettaa. Toisaalta malloc () -toiminto palauttaa NULL-osoittimen, jos se ei varaa muistia. Jos osoitinta käytetään tarkistamatta tätä, se johtaa järjestelmän kaatumiseen.
  6. Uuden operaattorin avulla allokoitu muisti voidaan jakaa 'poistamalla'. Toisaalta malloc () -toiminnolla allokoitu muisti voidaan jakaa ilmaisella ().
  7. Kun muisti on allokoitu uudella operaattorilla, sen kokoa ei voida muuten muuttaa. Toisaalta malloc () -toiminnolla allokoitu muisti voidaan jakaa uudelleen (muuttaa kokoa) realloc () -toiminnolla.
  8. Uuden suoritusaika on vähemmän verrattuna mallociin (), koska malloc on funktio ja uusi on rakenne.

johtopäätös:

Malloc () -toiminto on vanha tapa varata muisti dynaamisesti. Nykyään uutta operaattoria käytetään allokoimaan muisti suorituksen aikana, koska sillä on tiettyjä etuja mallociin nähden ().