Ennen kuin opimme mallocin ja callocin eron, opitaan
Mikä on dynaaminen muistin allokointi?
Dynaaminen muistin allokointi on prosessi muistin allokoimiseksi ajon aikana. Kirjastorutiineja on neljä, calloc (), free (), realloc () ja malloc (), joita voidaan käyttää muistin varaamiseen ja vapauttamiseen ohjelman suorituksen aikana. Nämä rutiinit on määritelty otsikkotiedostossa nimeltä stdlib.h.
Mikä on malloc ()?
Se on toiminto, jota käytetään muistilohkon varaamiseen dynaamisesti. Se varaa tietyn kokoisen muistitilan ja palauttaa tyhjän osoittimen muistipaikkaan.
Palautettu osoitin on tyypiltään tyhjä. Se tarkoittaa, että voimme määrittää malloc-toiminnon mille tahansa osoittimelle. Mallocin koko muoto on muistin allokointi.
Tässä opetusohjelmassa opit:
- Mikä on dynaaminen muistin allokointi?
- Mikä on malloc ()?
- Mikä on calloc ()?
- Miksi käyttää mallocia ()?
- Miksi käyttää calloc ()?
- Mallocin syntaksit ()
- Calloc: n syntaksi ()
- Esimerkki mallocista () C: ssä
- Esimerkki calloc (): sta C: ssä
- Ero callocin () ja mallocin () välillä
Mikä on calloc ()?
Calloc () -toimintoa käytetään allokoimaan useita muistilohkoja. Se on dynaaminen muistinjakotoiminto, jota käytetään muistin varaamiseen monimutkaisille tietorakenteille, kuten matriiseille ja rakenteille. Jos tämä toiminto ei pysty varaamaan tarpeeksi tilaa määritetyllä tavalla, se palauttaa nollan osoittimen. Calloc-funktion koko muoto on vierekkäinen allokointi.
Miksi käyttää mallocia ()?
Tässä ovat syyt mallocin () käyttöön
- Käytä malloc () -ominaisuutta, kun joudut varaamaan muistia ajon aikana.
- Käytä mallocia, kun joudut varaamaan objekteja, joiden on oltava olemassa nykyisen muistilohkon suorittamisen ulkopuolella.
- Valitse malloc (), jos sinun on allokoitava muisti kuin pinon koko.
- Se palauttaa osoittimen varatun tilan ensimmäiseen tavuun.
- Sen avulla kehittäjät voivat jakaa muistia tarpeen mukaan tarkkaan määrään.
- Tämä toiminto jakaa tavun muistilohkon koon.
Miksi käyttää calloc ()?
Tässä on syitä calloc (): n käyttöön
- Kun varattu muisti on nollattava.
- Voit käyttää muistipinoa käyttämällä calloc-näppäintä, joka palauttaa osoittimen.
- Käytetään, kun sinun on alustettava elementit nollaksi palauttamaan osoitin muistiin.
- Mallocin () avulla mahdollisen ylivuoton estämiseksi
- Pyydä sivua, jonka tiedetään olevan jo nollattu calloc () -toiminnon avulla.
Mallocin syntaksit ()
Tässä on mallocin syntaksi ()
ptr = (cast_type *) malloc (byte_size);
Yllä olevassa syntaksissa ptr on osoitin cast_type. Malloc-funktio palauttaa osoittimen tavun koon allokoituun muistiin.
Example: ptr = (int *) malloc (50)
Kun tämä lause on suoritettu onnistuneesti, varataan 50 tavun muistitila. Varatun tilan ensimmäisen tavun osoite on osoitettu int-tyyppiselle osoittimelle "ptr".
Calloc: n syntaksi ()
Tässä on mallocin syntaksi ()
ptr = (cast_type *) calloc (n, size);
Edellä olevaa syntaksia käytetään n saman kokoisen muistilohkon varaamiseen. Kun muistitila on varattu, kaikki tavut alustetaan nollaan. Osoitin, joka on tällä hetkellä varatun muistitilan ensimmäisellä tavulla, palautetaan.
Esimerkki mallocista () C: ssä
Paljaskoodissa sizeof (* ptr) käytetään varaamaan 15 kokonaisluvun muistilohko. Löydämme printf-käskystä kuudennen kokonaisluvun arvon.
#include#include int main(){int *ptr;ptr = malloc(15 * sizeof(*ptr));if (ptr != NULL) {*(ptr + 5) = 480;printf("Value of the 6th integer is %d",*(ptr + 5));}}
Tuotos:
Kuudennen kokonaisluvun arvo on 480
Esimerkki calloc (): sta C: ssä
Alla oleva C-kieliohjelma laskee kymmenen ensimmäisen termin summan. Jos osoittimen arvo on nolla, muistitilaa ei jaeta.
Sillä silmukka käytetään iteraamaan muuttujan "i" arvo ja tulostamaan summa. Lopuksi toimintoa vapaata käytetään osoittimen vapauttamiseen.
#include#include int main() {int i, * ptr, sum = 0;ptr = calloc(10, sizeof(int));if (ptr == NULL) {printf("Error! memory not allocated.");exit(0);}printf("Building and calculating the sequence sum of the first 10 terms \n");for (i = 0; i < 10; ++i) { * (ptr + i) = i;sum += * (ptr + i);}printf("Sum = %d", sum);free(ptr);return 0;}
Tuotos:
Ensimmäisten 10 termin järjestyssumman rakentaminen ja laskeminen n Sum = 45
Ero callocin () ja mallocin () välillä
Herer on tärkeä ero mallocin () ja callocin () välillä:
malloc () | calloc () |
Malloc () -toiminto luo yhden käyttäjän määrittelemän kokoisen muistilohkon. | Calloc () -toiminto voi määrittää muuttujalle useita muistilohkoja. |
Malloc-toiminto sisältää roska-arvon. | Calloc-toiminnon varaama muistilohko alustetaan aina nollaan. |
Argumenttien lukumäärä on 2. | Argumenttien lukumäärä on 1. |
Calloc on hitaampi kuin malloc. | Malloc on nopeampi kuin calloc. |
Se ei ole turvallinen kuin verrata callociin. | Se on turvallinen käyttää mallociin verrattuna. |
Aikatehokkuus on korkeampi kuin calloc (). | Aikatehokkuus on matalampi kuin malloc (). |
Malloc () -funktio palauttaa vain lähtöosoitteen eikä tee siitä nollaa. | Ennen osoitteen jakamista Calloc () -funktio palauttaa lähtöosoitteen ja tekee siitä nollan. |
Se ei alusta muistia. | Se suorittaa muistin alustuksen. |
AVAINEROT:
- malloc () -funktio palauttaa vain lähtöosoitteen eikä tee siitä nollaa, calloc () -funktio palauttaa lähtöosoitteen ja tekee siitä nollan.
- Malloc-funktiossa argumenttien määrä on 2, kun taas calloc-funktioissa argumenttien lukumäärä on 1.
- malloc () aikatehokkuus on korkeampi kuin calloc () kun taas malloc () ei ole turvallinen verrattuna calloc ()
- malloc ei alusta muistia, kun taas calloc suorittaa muistin alustuksen.