Enne malloci ja calloci erinevuse õppimist, õppigem
Mis on dünaamiline mälu eraldamine?
Dünaamiline mälujaotus on mälu eraldamine käitusajal. Teeki on neli rutiini: calloc (), free (), realloc () ja malloc (), mida saab kasutada mälu eraldamiseks ja selle vabastamiseks programmi käivitamisel. Need rutiinid on määratletud päisefailis nimega stdlib.h.
Mis on malloc ()?
See on funktsioon, mida kasutatakse mäluploki dünaamiliseks eraldamiseks. See reserveerib määratud suurusega mäluruumi ja tagastab nullkoha, mis osutab mälukohale.
Tagastatud kursor on tavaliselt tühine. See tähendab, et saame malloc-funktsiooni määrata igale osutile. Malloci täielik vorm on mälu eraldamine.
Selles õpetuses saate teada:
- Mis on dünaamiline mälu eraldamine?
- Mis on malloc ()?
- Mis on calloc ()?
- Miks kasutada malloc ()?
- Miks kasutada calloc ()?
- Malloki süntaks ()
- Calloc () süntaks
- Malloc () näide C-s
- Calloc () näide C-s
- Erinevus calloc () ja malloc () vahel
Mis on calloc ()?
Funktsiooni Calloc () kasutatakse mitme mäluploki eraldamiseks. See on dünaamiline mälu eraldamise funktsioon, mida kasutatakse mälu eraldamiseks keerukatele andmestruktuuridele, nagu massiivid ja struktuurid. Kui see funktsioon ei suuda määratleda piisavalt ruumi, tagastab see nullkursori. Calloc-funktsiooni täielik vorm on külgnev jaotamine.
Miks kasutada malloc ()?
Siin on malloc () kasutamise põhjused
- Kui peate käitamise ajal mälu eraldama, peaksite kasutama malloc ().
- Malloci peaksite kasutama siis, kui peate eraldama objektid, mis peavad eksisteerima ka pärast praeguse mäluploki täitmist.
- Valige malloc (), kui peate eraldama selle virna suurusest suurema mälu.
- See viib kursori eraldatud ruumi esimese baidini.
- See võimaldab arendajatel eraldada mälu, kui see täpselt vajalik on.
- See funktsioon eraldab hunnikust baitide mäluploki suuruse.
Miks kasutada calloc ()?
Siin on calloc () kasutamise põhjused
- Kui peate eraldatud mälu nullima.
- Mäluhunnikule juurdepääsu saamiseks võite kasutada calloci, mis tagastab kursori.
- Kasutatakse juhul, kui peate elemendid nullima, et kursor mällu tagasi tuua.
- Mallociga () võimaliku ülevoolu vältimiseks
- Kasutage lehte, mille teadaolevalt on juba nullitud, taotlema calloc ().
Malloki süntaks ()
Siin on malloci süntaks ()
ptr = (cast_type *) malloc (byte_size);
Ülaltoodud süntaksis on ptr osuti cast_type. Funktsioon malloc tagastab osuti baidi_suuruse eraldatud mällu.
Example: ptr = (int *) malloc (50)
Kui see lause on edukalt täidetud, reserveeritakse 50 baiti mäluruum. Reserveeritud ruumi esimese baidi aadress määratakse kursori "ptr" tüübile int.
Calloc () süntaks
Siin on malloci süntaks ()
ptr = (cast_type *) calloc (n, size);
Ülaltoodud süntaksit kasutatakse n sama suurusega mäluploki eraldamiseks. Pärast mäluruumi eraldamist lähtestatakse kõik baidid nulli. Kursor, mis on praegu eraldatud mäluruumi esimesel baidil, tagastatakse.
Malloc () näide C-s
Allpool toodud koodis kasutatakse sizeof (* ptr) 15 täisarvulise mäluploki eraldamiseks. Lauses printf leiame kuuenda täisarvu väärtuse.
#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));}}
Väljund:
Kuuenda täisarvu väärtus on 480
Calloc () näide C-s
Allpool olev C-keele programm arvutab esimese kümne termini summa. Kui kursori väärtus on null, siis mäluruumi ei eraldata.
For silmuse jaoks kasutatakse muutuja "i" väärtuse kordamiseks ja summa printimiseks. Viimasena kasutatakse funktsiooni free (point free) funktsiooni kursori vabastamiseks.
#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;}
Väljund:
Esimeste 10 termini jadasumma koostamine ja arvutamine n Sum = 45
Erinevus calloc () ja malloc () vahel
Herer on oluline erinevus malloc () ja calloc () vahel:
malloc () | calloc () |
Funktsioon Malloc () loob ühe kasutaja määratud suurusega mäluploki. | Funktsioon Calloc () võib määrata muutuja jaoks mitu mäluplokki. |
Malloc funktsioon sisaldab prügi väärtust. | Calloc-funktsiooni eraldatud mäluplokk lähtestatakse alati nulli. |
Argumentide arv on 2. | Argumendi arv on 1. |
Calloc on aeglasem kui malloc. | Malloc on kiirem kui calloc. |
Callociga võrreldes pole see turvaline. | Seda on mallociga võrreldes turvaline kasutada. |
Aja efektiivsus on kõrgem kui calloc (). | Aja efektiivsus on madalam kui malloc (). |
Funktsioon Malloc () tagastab ainult lähteaadressi ja ei muuda seda nulliks. | Enne aadressi eraldamist tagastab funktsioon Calloc () algusaadressi ja muudab selle nulliks. |
See ei tee mälu lähtestamist. | See teostab mälu lähtestamist. |
PÕHISED VAHED:
- funktsioon malloc () tagastab ainult algusaadressi ega muuda seda nulli, funktsioon calloc () tagastab lähteaadressi ja muudab selle nulliks.
- Malloc-funktsioonis on argumentide arv 2, calloc-funktsioonides 1 argument.
- malloc () aja efektiivsus on kõrgem kui calloc () samas kui malloc () pole callociga () võrreldes turvaline
- malloc ei vormista mälu, samas kui calloc teostab mälu.