Programmeerimisel on vaja andmeid säilitada. Andmed salvestatakse mällu. Neid mälu asukohti tuntakse muutujatena. Igal muutujal on kindel tüüp. Need võivad olla täisarvud, hõljukid, kahekordistused, tähemärgid jne. Samuti on olemas andmestruktuure, mis võivad säilitada sama tüüpi elementide kindla suurusega jadakogu. See on massiiv. Programmeerija peab deklareerima massiivi suuruse. Kui programmeerija deklareerib viiest elemendist koosneva täisarvude massiivi, pole deklareeritud suurusest suuremale indeksile väärtust võimalik määrata. Mälu eraldamine on fikseeritud ja seda ei saa töö ajal muuta. Teine mälu eraldamise meetod on dünaamiline mälu eraldamine. Dünaamiline mälujaotus aitab vajadusel rohkem mälu eraldada ja vajadusel vabastada. Päisefailil on dünaamilise mälu jaotamise neli funktsiooni. kalloc ja malloc on kaks sellist funktsiooni. võtme erinevus kalloki ja malloci vahel on see calloc eraldab mälu ja lähtestab ka eraldatud mäluplokid nullini, malloc eraldab mälu, kuid ei lähtesta seda eraldatud mälu nulli. Klikkides sisule juurdepääsul saadakse null, kuid malloc annab prügi väärtuse.
1. Ülevaade ja peamised erinevused
2. Mis on kallok
3. Mis on malloc
4. Sarnasused kalloki ja malloki vahel
5. Kõrvuti võrdlus - tabeli kujul kalloc vs malloc
6. Kokkuvõte
Mälu eraldamine on protsess, mille käigus määratakse mälu täitmisprogrammidele. Mõnikord on vaja muuta mälu suurust. Seetõttu kasutatakse dünaamilist mälujaotust. Selle tegemiseks kasutatakse viiteid. Osutid on võrdlusmuutujad, mis hoiavad mõne muu muutuja aadressi.
Joonis 01: kalloc ja malloc
calloc tähistab “külgnevat jaotust”. See eraldab mitu sama suurusega mäluplokki. Kalloki süntaks on järgmine. Sellel on kaks argumenti. Need on plokkide arv ja iga ploki suurus. Funktsioon calloc tagastab tühise osuti, seega kasutatakse cast operaatorit kursori tüübi tagastamiseks vastavalt nõutavale andmetüübile.
void * calloc (suurus_t num, suurus_t suurus);
Vaadake allpool lihtsat C-programmi.
# kaasata
# kaasata
int main ()
int ptr * = (int *) kallokk (20, suurus (int));
if (ptr == NULL)
printf („Mälu ei eraldata”);
veel
printf (“Mälu on eraldatud”);
tagasi 0;
Vastavalt ülaltoodud programmile eraldatakse külgnev mäluplokk, mis mahutab 20 elementi. Igal neist on täisarv. Kasutatakse suurust (int), kuna täisarvu tüüp erineb kompilaatorilt.
Kui mälu jaotamine õnnestub, tagastab see mäluploki baasaadressi. See tähendab, et osuti ptr osutab nüüd selle mäluploki põhiaadressile. Kõik eraldatud piirkonnad lähtestatakse nulliks. See prindib mälu eraldatud teate. Kui mälu eraldamine ebaõnnestub, tagastab see null-kursori. Seetõttu prinditakse see Mälu pole eraldatud.
Malloci funktsiooni kasutatakse mälus vajaliku hulga baitide eraldamiseks. Malloci süntaks on järgmine. Suurus tähistab vajalikku mälu baitides.
tühine * malloc (suurus_t_suurus);
Funktsioon malloc tagastab tühise osuti, seega kasutatakse cast operaatorit kursori tüübi tagastamiseks vastavalt nõutavale andmetüübile.
Vaadake allpool lihtsat C-programmi malloc-funktsiooniga.
# kaasata
# kaasata
int main ()
int ptr * = (int *) malloc (10 * suurusof (int));
if (ptr == NULL)
printf („Mälu ei eraldata”);
veel
printf (“Mälu on eraldatud”);
tagasi 0;
Ülaltoodud programmi kohaselt eraldatakse mälu plokk. Kursor osutab eraldatud mälu algusaadressile. Tagastatud osuti teisendatakse täisarvuks. Kui mälu on eraldatud, prinditakse mälu eraldamise teade. Kui mälu ei eraldata, naaseb nullkursor. Seetõttu prinditakse mälu eraldamata teade.
kalloc vs malloc | |
calloc on funktsioon dünaamilise mälu jaotamiseks C-keele stdlib.h päisefailis, mis eraldab kindla arvu baite ja lähtestab need nullini. | malloc on dünaamilise mälu eraldamise funktsioon C-keele stdlib.h päisefailis, mis eraldab kindla arvu baite. |
Tähendus | |
calloc tähistab külgnevat jaotust. | malloc tähistab mälu jaotust. |
Süntaks | |
calloc järgib süntaksi, mis sarnaneb void * calloc'iga (suurus_t_num, suurus_t suurus); | malloc järgib süntaksi, mis sarnaneb void * malloc (suurus_t_suurus);. |
Argumentide arv | |
calloc esitab kaks argumenti. Need on plokkide arv ja iga ploki suurus. | malloc võtab ühe argumendi. See on arv baite. |
Kiirus | |
kalloc võtab veidi kauem kui malloc. Selle põhjuseks on eraldatud mälu nullindamisega täiendav samm. | malloc on kiirem kui kalloc. |
Staatilistes mälumahtudes, nagu näiteks massiive kasutades, on mälu fikseeritud. Kui vähe elemente on salvestatud, raisatakse ülejäänud mälu. See võib põhjustada tõrkeid ka siis, kui eraldatud mälu on vajalikust vähem. Seetõttu kasutatakse dünaamilist mälujaotust. C-keeles pakuvad calloc ja malloc dünaamilist mälujaotust. Erinevus calloci ja malloci vahel on see, et calloc eraldab mälu ja lähtestab eraldatud mäluplokid nullini, samal ajal kui malloc eraldab mälu, kuid ei lähtesta mäluplokke nullini. Malloc võtab kaks argumenti, samas kui calloc võtab kaks argumenti.
Selle artikli PDF-versiooni saate alla laadida ja seda võrguühenduseta otstarbel kasutada tsitaatide märkuse kohaselt. Laadige PDF-fail alla siit: Erinevus kalloki ja malloki vahel
1.Kumar, Krishan. “Erinevus Malloci ja Calloci vahel C-s.” Cs-Fundamentals.com, Cs-Fundamentals.com. Saadaval siin
2. C-dünaamilise mälu eraldamine. Vikipeedia, Wikimedia Foundation, 13. jaanuar 2018. Saadaval siin
3. “Calloc () versus malloc ()”. GeeksforGeeks, 14. juuni 2017. Saadaval siin