Suositeltava, 2024

Toimituksen Valinta

Mallocin ja callocin välinen ero

Mallocin ja calloc-funktion välinen olennainen ero on, että calloc () tarvitsee kaksi argumenttia yhden argumentin sijaan, jota malloc () vaatii. Sekä malloc () että calloc () ovat toimintoja, jotka C-ohjelmointikieli tarjoaa dynaamisen muistin allokointia ja de-allokointia ajoaikana.

Ennen kuin ymmärrät malloc () ja calloc () -toiminnot, ymmärretään ensin dynaamisen muistin allokointi. Muistin allokointi on prosessi, jossa tietokoneen muisti määritetään ohjelmien ja prosessien suorittamiseksi. Käytämme dynaamisia allokointitekniikoita, kun ei tiedetä, kuinka paljon muistitilaa tarvitaan ohjelmassa ja prosessissa.

Dynaaminen muistin allokointi johtuu staattisen muistin allokointiin liittyvistä ongelmista, kuten jos vähemmän elementtejä tallennetaan, loput muistista hukkaan tarpeettomasti. Siksi se voittaa staattisen muistin allokoinnin ongelmat, joissa muisti allokoidaan vain silloin, kun sitä tarvitaan.

Vertailukaavio

Vertailun perusteetmalloc ()calloc ()
Ei lohkojaMäärittää vaaditun muistin yhden lohkon.
Määrittää halutun muistin useita lohkoja.
Syntaksivoid * malloc (size_t size);void * calloc (size_t num, size_t size);
alustusmalloc () ei tyhjennä ja alustaa varattua muistia.Allokoitu muisti alustetaan nollaan käyttämällä calloc (): ta.
Myöntämistapamalloc () -toiminto allokoi koon ”koko” muistin kasasta.calloc () -toiminto allokoi muistin, jonka koko on sama kuin num *.
NopeusNopeastiVerrattain hidas.

Mallocin määritelmä ()

Malloc- funktio määrittää muistilohkon tavuina . Käyttäjän on annettava nimenomaan lohkokoko, se vaatii käytön.

Malloc-funktioohjelman avulla järjestelmä pyytää RAM-muistia muistin jakamista varten, jos pyyntö hyväksytään (ts. Malloc-toiminto sanoo onnistuneesti muistin jakamisessa), se palauttaa osoittimen ensimmäiseen muistilohkoon. Se palauttaa tyhjän tyyppisen osoittimen, mikä tarkoittaa mitä tahansa osoitinta.

Vaikka se palauttaa NULL: n, jos malloc-toiminnot eivät pysty varaamaan tarvittavaa muistimäärää. Malloc-toiminto on käytettävissä TURBO C: ssä, otsikkotiedostossa alloc.h tai stdlib.h, ja UNIX: ssa se on saatavilla otsikkotiedostossa .

SYNTAKSI

Tämän toiminnon syntaksi on seuraava:

malloc(number of elements * size of each element);

esimerkiksi,
int *ptr;
ptr=malloc(10*sizeof (int))

Jos koko edustaa tavuissa vaadittavan muistin kokoa (eli allokoitavien muistipaikkojen määrää).

Mutta kuten edellä mainittiin, funktio malloc palauttaa tyhjän osoittimen, joten valittu operaattori on velvollinen muuttamaan palautetun osoitteen tyypin tarpeen mukaan, edellä mainittu ilmoitus voidaan esittää seuraavassa muodossa:

ptr_var=(type_cast* ) malloc (size)

Jos ptr_var on ptr_var nimi, joka säilyttää varatun muistilohkon type_cast, type_cast on datatyyppi, johon palautettu osoitin (tai tyyppi void) on muunnettava, ja koko kuvaa allokoidun muistilohkon kokoa tavuina .

Esimerkiksi:
int *ptr;
ptr=(int*) malloc (10 * size of (int));

Malloc-toiminnolla varattu muisti sisältää roskaa .

Huomaa, että tarkistaaksesi, että jos malloc luo vastaavan pyynnön järjestelmän RAM-muistin myöntämiselle tai hylätään (jos tarvittava tila ei ole käytettävissä). Voimme hyödyntää omaisuutta, jossa tarvittavan määrän muistia ei ole osoitettu malloc-toiminnolla palauttaa NULL.

Callocin määritelmä ()

Calloc- toiminto toimii täsmälleen samoin kuin malloc- funktio, lukuun ottamatta sitä, että se vaatii kaksi argumenttia, kuten malloc-tapauksessa () tarvitaan vain yksi argumentti.

Esimerkiksi:
int*ptr;
ptr = (int*)calloc(10, 2);

Tässä 2 määrittää datatyypin koon tavussa, jota varten haluamme allokoinnin, joka on tässä tapauksessa 2 kokonaislukuihin. 10 merkitsee niiden elementtien lukumäärää, joille jakaminen on tehtävä.

Muista, että argumentti, joka siirrettiin funktiolle malloc, oli (n * 10), se on yksi argumentti, jota ei pidä sekoittaa, koska useat argumentit erotetaan aina pilkuilla. Argumentilla (n * 10) ei ole pilkkuja. Näin ollen se on yksi argumentti, vaikkakaan ei yksinkertainen vaan ilmaus.

Palaa yllä olevaan ilmoitukseen yllä olevan lausunnon suorittamisen jälkeen pyytävälle ohjelmalle on varattu 20 tavun muistilohko, ja ensimmäisen lohkon osoite osoitetaan pyytävälle ohjelmalle, ja ensimmäisen lohkon osoite osoitetaan osoittimelle PTR.

Calloc-toiminnolla varattu muisti pitää kaikki nollat. Calloc-toiminto on myös saatavissa otsikkotiedostosta tai TURBO C.

Mallocin ja callocin väliset keskeiset erot

Malloc- ja calloc-toimintojen ensisijaiset erot ovat:

  1. Mallokissa osoitetaan yksittäinen kysytyn muistin lohko, kun taas calloc jakaa useita halutun muistin lohkoja.
  2. Malloc-toiminto ei tyhjennä ja alustaa varattua muistia. Se sisältää roska-arvoa, eikä varatun muistin kohdetta voida muuttaa. Sitä vastoin calloc alustaa varatun muistin nollaan.
  3. malloc on nopeampi kuin calloc, koska vaaditaan lisäkäynnistysvaiheita callocissa, mutta ero on vähäinen.
  4. Toinen ero näiden kahden välillä on se, että calloc on malloc + memset, memset allokoi fyysiset sivut muistiin, kun taas malloc antaa muistin vain virtuaalisen osoitteen kasauksesta.

johtopäätös:

Sekä mallok- että calloc-funktioita käytetään muistin allokointiin ja niiden tietty etu, ja mallocin kaltaiset haitat ovat nopeat verrattuna callociin. Lisäksi malloc on helpompi käyttää, koska se vie vain yhden argumentin, koska calloc jakaa muistin ja alustaa muistialue ZERO: lla. Mutta haluat mieluummin käyttää callocia, kun muuttujan alustaminen on sinulle tärkeämpää.

Top