mallocin ja callocin funktion perustavanlaatuinen ero on se, että calloc() tarvitsee kaksi argumenttia yhden mallocin () vaatiman argumentin sijaan. Sekä malloc() että calloc () ovat toimintoja, jotka C-ohjelmointikieli tarjoaa dynaamiseen muistin allokointiin ja de-allokointiin ajon aikana.
ennen malloc () – ja calloc () – funktioiden ymmärtämistä on ensin ymmärrettävä dynaamisen muistinjaon merkitys. Muistinjako on menettely, jolla tietokoneen muisti osoitetaan ohjelmien ja prosessien suorittamista varten. Käytämme dynaamisia allokointitekniikoita, kun etukäteen ei tiedetä, kuinka paljon muistitilaa ohjelmaan ja prosessiin tarvitaan.
dynaaminen muistinjako syntyy staattiseen muistinjakoon liittyvien ongelmien vuoksi, kuten jos elementtejä on tallennettuna vähemmän, muu muisti menee tarpeettomasti hukkaan. Siksi se voittaa staattisen muistin allokoinnin ongelmat, joissa muistia jaetaan vain silloin, kun sitä tarvitaan.
pitoisuus: malloc() Vs calloc()
- Vertailukaavio
- keskeiset erot
määritelmä
ohtopäätökset
Vertailukaavio
vertailun perusta | calloc () | |
---|---|---|
ei lohkoja | määrää yhden lohkon vaadittua muistia. | määrittää useita lohkoja pyydetystä muistista. |
syntaksi | void * malloc (size_t size); | void * calloc (size_t num, size_t size); |
alustus | malloc() ei tyhjennä ja alustaa varattua muistia. | varattu muisti alustetaan nollaan callocin () avulla. |
jakotapa | malloc () – funktio allokoi kasasta kokoisen muistin. | calloc () – funktio jakaa muistia, jonka koko on yhtä suuri kuin num * – koko. |
nopeus | nopea | verrattain hidas. |
malloc-funktio määrittää muistilohkon tavuina. Käyttäjän tulee nimenomaisesti antaa lohkon koko, se vaatii käyttöä.
malloc-funktion ohjelma pyytää järjestelmän RAM-muistia muistin jakamiseksi, jos pyyntö myönnetään (eli malloc-funktio sanoo onnistuneen muistin jakamisessa), se palauttaa osoittimen ensimmäiseen muistilohkoon. Se palauttaa mitätön osoittimen tyyppi, Mikä tarkoittaa, että minkä tahansa osoittimen voi määrittää.
tosin se palauttaa nollan, jos malloc-funktiot eivät pysty varaamaan vaadittua muistimäärää. Malloc-funktio on saatavilla TURBO C: ssä, header file alloc.h
tai stdlib.h
, ja Unixissa se on saatavilla header file <malloc.h>
.
syntaksi
tämän funktion syntaksi on seuraava:
malloc(number of elements * size of each element);
esimerkiksiint *ptr;
ptr=malloc(10*sizeof (int))
missä koko edustaa kokoa muistia tarvitaan tavuissa(TS., jaettavien vierekkäisten muistipaikkojen määrä).
mutta kuten aiemmin mainittiin, että funktio malloc palauttaa tyhjän osoittimen, joten valetun operaattorin on muutettava palautettua osoitintyyppiä tarpeemme mukaan, yllä oleva ilmoitus voidaan esittää seuraavassa muodossa:
ptr_var=(type_cast* ) malloc (size)
missä ptr_var
on sen osoittimen nimi, joka säilyttää osoitetun muistilohkon lähtöosoitteen, type_cast
on tietotyyppi, johon palautettu osoitin (tai type void) muutetaan, ja koko kuvaa osoitetun koon muistilohko tavuina.
esimerkiksi:int *ptr;
ptr=(int*) malloc (10 * size of (int));
malloc-funktion osoittama muisti sisältää roskan arvon.
huomaa, että jos vastaava pyyntö on luotu malloc jakaa muistin myönnetty järjestelmän RAM, tai hylätty (jos vaadittu tila ei ole käytettävissä). Voimme hyödyntää ominaisuutta, jossa tarvittava määrä muistia ei ole määritetty malloc funktio palauttaa NULL.
määritelmä calloc ()
calloc-funktio toimii täsmälleen samalla tavalla kuin malloc-funktio pois lukien se, että se vaatii kaksi argumenttia, koska malloc-funktion() tapauksessa tarvitaan vain yksi argumentti.
esimerkiksi:int*ptr;
ptr = (int*)calloc(10,2);
Tässä 2 määrittää tietotyypin koon tavussa, jolle haluamme jaon, eli tässä tapauksessa on 2 kokonaisluvuille. Ja 10 merkitsee niiden tekijöiden lukumäärää, joille määrärahoja myönnetään.
muista, että funktiolle malloc siirretty argumentti oli (n*10), se on yksittäinen argumentti, jota ei pidä sekoittaa, koska useat argumentit erotetaan aina pilkulla. Argumentilla (n*10) ei ole pilkkuja välissä. Näin ollen se on yksi argumentti, joskaan ei yksinkertainen vaan ilmaus.
palataan yllä olevaan ilmoitukseen, kun Yllä oleva lausunto suoritetaan, 20 tavun muistilohko osoitetaan pyytävälle ohjelmalle ja ensimmäisen lohkon osoite annetaan osoittimelle ptr.
calloc-funktion osoittama muisti pitää kaikki nollat. Calloc-funktio on saatavissa myös otsikkotiedostossa <stdlib.h>
tai <alloc.h>
TURBO C: ssä.
keskeiset erot malloc-ja calloc-funktioiden välillä
ensisijaiset erot malloc-ja calloc-funktioiden välillä ovat:
- malloc-funktioissa annetaan yksi vaadittu muistilohko, kun taas calloc-funktioissa jaetaan useita pyydetyn muistin lohkoja.
- malloc-funktio ei tyhjennä ja alustaa varatun muistin. Se sisältää roskat arvo ja kohde varattu muisti ei voi muuttaa. Calloc sen sijaan alustaa varatun muistin nollaan.
- malloc on callocia nopeampi, koska callocissa vaaditaan Lisää alustuksen vaiheita, mutta ero on häviävän pieni.
- toinen ero näiden kahden välillä on se, että calloc on malloc+memset, memset jakaa fyysiset sivut muistiin, kun taas malloc määrää muistin kasasta vain virtuaaliosoitteeseen.
päättely
sekä malloc-että calloc-funktioita käytetään muistin jakamiseen ja niillä on tietty etunsa, ja mallocin kaltainen haitta on nopea verrattuna callociin. Lisäksi mallocia on helpompi käyttää, koska se vaatii vain yhden argumentin, koska calloc jakaa muistia ja alustaa muistialueen nollalla. Mutta haluat mieluummin käyttää callocia, kun muuttujan alustus on sinulle tärkeämpää.