Avainero – calloc vs malloc
Ohjelmoinnissa tiedot on tallennettava. Tiedot tallennetaan muistiin. Nämä muistipaikat tunnetaan muuttujina. Jokaisella muuttujalla on tietty tyyppi. Ne voivat olla kokonaislukuja, kellukkeita, tuplauksia, merkkejä jne. On myös tietorakenteita, jotka voivat tallentaa kiinteän kokoisen peräkkäisen kokoelman samantyyppisiä elementtejä. Se on joukko. Ohjelmoijan on ilmoitettava taulukon koko. Jos ohjelmoija ilmoittaa kokonaislukutaulukon viidelle elementille, ei ole mahdollista antaa arvoa indeksille, joka on suurempi kuin ilmoitettu koko. Muistin varaus on kiinteä, eikä sitä voi muuttaa ajon aikana. Toinen muistinvarausmenetelmä on dynaaminen muistin allokointi. Dynaaminen muistin varaus auttaa varaamaan lisää muistia tarvittaessa ja vapauttamaan tarvittaessa. Otsikkotiedostossa on neljä funktiota dynaamiseen muistin varaamiseen. calloc ja malloc ovat kaksi tällaista funktiota. avainero callocin ja mallocin välillä on se, että calloc varaa muistin ja myös alustaa allokoidut muistilohkot nollaan, kun taas malloc varaa muistin, mutta ei alusta varattua muistia nollaan. Sisällön käyttäminen callocissa antaa nollan, mutta malloc antaa roskaarvon.
Mikä calloc on?
Muistin varaus on prosessi, jossa osoitetaan muistia suoritettaville ohjelmille. Joskus on tarpeen muuttaa muistin kokoa. Siksi käytetään dynaamista muistin varausta. Se tehdään osoittimien avulla. Osoittimet ovat viitemuuttujia, jotka sisältävät toisen muuttujan osoitteen.
Kuva 01: calloc ja malloc
calloc tarkoittaa "vierekkäistä allokaatiota". Se varaa useita samankokoisia muistilohkoja. Callocin syntaksi on seuraava. Se vaatii kaksi argumenttia. Ne ovat lohkojen lukumäärä ja kunkin lohkon koko. Funktio calloc palauttaa void-osoittimen, joten cast-operaattoria käytetään palauttamaan osoitintyyppi vaaditun tietotyypin mukaan.
voidcalloc(size_t num, size_t size);
Katso alla olevaa yksinkertaista C-ohjelmaa.
sisällytä
sisällytä
int main(){
int ptr=(int) calloc(20, sizeof(int));
if (ptr==NULL){
printf("Muistia ei ole varattu");
}
else{
printf("Muisti on varattu");
}
palautus 0;
}
Yllä olevan ohjelman mukaan varataan peräkkäinen muistilohko, johon mahtuu 20 elementtiä. Jokaisella on kokonaisluvun koko. Kokonaislukua (int) käytetään, koska kokonaislukutyyppi vaihtelee kääntäjästä toiseen.
Jos muistin varaus onnistuu, se palauttaa muistilohkon perusosoitteen. Se tarkoittaa, että osoitin ptr osoittaa nyt kyseisen muistilohkon perusosoitteeseen. Kaikki varatut alueet alustetaan nolliksi. Se tulostaa Muisti varattu -viestin. Jos muistin varaus ei onnistu, se palauttaa nollaosoittimen. Siksi se tulostaa Muistia ei ole varattu -viestin.
Mikä on malloc?
Malloc-funktiota käytetään varaamaan tarvittava määrä tavuja muistissa. Mallocin syntaksi on seuraava. Koko edustaa vaadittua muistia tavuina.
void malloc(size_t_size);
Funktion malloc palauttaa void-osoittimen, joten cast-operaattoria käytetään palauttamaan osoitintyyppi vaaditun tietotyypin mukaan.
Katso alla olevaa yksinkertaista C-ohjelmaa malloc-funktiolla.
sisällytä
sisällytä
int main(){
int ptr=(int) malloc (10sizeof(int));
if (ptr==NULL){
printf("Muistia ei ole varattu");
}
else{
printf("Muisti on varattu");
}
palautus 0;
}
Yllä olevan ohjelman mukaan muistilohko varataan. Osoitin osoittaa varatun muistin aloitusosoitteeseen. Palautettu osoitin muunnetaan kokonaislukutyypiksi. Jos muistia on varattu, se tulostaa muistia on varattu -viestin. Jos muistia ei ole varattu, nollaosoitin palaa. Siksi muistia ei ole varattu viesti tulostuu.
Mitä yhtäläisyyksiä callocin ja mallocin välillä on?
- Molemmat nämä funktiot on ilmoitettu otsikkotiedostossa. Se on tavallinen kirjaston otsikkotiedosto.
- Molempia toimintoja käytetään dynaamiseen muistin varaamiseen.
- Callocin ja mallocin palauttama osoitin tulee heittää tiettyyn tyyppiin.
- Onnistuneessa muistin varaamisessa molemmat funktiot palauttavat osoittimen muistilohkon perusosoitteella.
- Jos muistin varaus ei onnistu, palautetaan nollaosoitin.
Mitä eroa callocin ja mallocin välillä on?
calloc vs malloc |
|
calloc on C-kielen stdlib.h-otsikkotiedoston dynaamisen muistin varauksen funktio, joka varaa tietyn määrän tavuja ja alustaa ne nollaan. | malloc on funktio dynaamiseen muistin varaamiseen C-kielen stdlib.h otsikkotiedostossa, joka varaa tietyn määrän tavuja. |
Merkitys | |
calloc tarkoittaa vierekkäistä allokaatiota. | malloc tarkoittaa muistin varausta. |
Syntaksi | |
calloc noudattaa syntaksia, joka on samanlainen kuin void calloc(size_t_num, size_t size); | malloc noudattaa syntaksia, joka on samanlainen kuin void malloc(size_t_size);. |
Argumenttien määrä | |
calloc ottaa kaksi argumenttia. Ne sisältävät useita lohkoja ja kunkin lohkon kokoa. | malloc ottaa yhden argumentin. Se on tavujen määrä. |
Nopeus | |
calloc kestää hieman kauemmin kuin malloc. Tämä johtuu ylimääräisestä vaiheesta, jossa varattu muisti alustetaan nollalla. | malloc on nopeampi kuin calloc. |
Yhteenveto – calloc vs malloc
Staattisessa muistin allokoinnissa, kuten taulukoita käyttämällä, muisti on kiinteä. Jos vain vähän elementtejä on tallennettu, loput muistista menee hukkaan. Se voi myös aiheuttaa virheitä, jos varattu muisti on pieni kuin vaadittu muisti. Siksi käytetään dynaamista muistin varausta. C-kielessä calloc ja malloc tarjoavat dynaamisen muistin allokoinnin. Ero callocin ja mallocin välillä on se, että calloc varaa muistin ja myös alustaa varatut muistilohkot nollaan, kun taas malloc varaa muistin, mutta ei alusta muistilohkoja nollaan. Malloc ottaa kaksi argumenttia, kun taas calloc ottaa kaksi argumenttia.
Lataa PDF: Calloc vs malloc
Voit ladata tämän artikkelin PDF-version ja käyttää sitä offline-tarkoituksiin lainaushuomautuksen mukaisesti. Lataa PDF-versio tästä: Callocin ja mallocin ero