Erinevus malloc () ja calloc () vahel
Peamised erinevused malloc() ja calloc() vahel
- Funktsioon malloc() tagastab ainult algusaadressi ja ei muuda seda nulliks, teisest kรผljest tagastab funktsioon calloc() lรคhteaadressi ja muudab selle nulliks.
- Funktsioonis malloc on argumentide arv 1, samas kui funktsiooni calloc puhul on argumentide arv 2.
- malloc() ajaefektiivsus on kรตrgem kui calloc(), samas kui malloc() ei ole calloc()-ga vรตrreldes turvaline
- malloc ei initsialiseeri mรคlu, samas kui calloc teostab mรคlu lรคhtestamist.

Mis on dรผnaamiline mรคlu eraldamine?
Dรผnaamiline mรคlu eraldamine on mรคlu eraldamise protsess kรคitusajal. On neli teegirutiini, calloc(), free(), realloc()ja malloc(), mida saab kasutada mรคlu eraldamiseks ja selle vabastamiseks programmi tรคitmise ajal. 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 mรคlukohale osutava nullkursori.
Tagastatud kursor on tavaliselt tรผhine. See tรคhendab, et saame mรครคrata mis tahes osutile malloc funktsiooni. Malloci tรคisvorm on mรคlu eraldamine.
Mis on calloc()?
Calloc() funktsioon kasutatakse mitme mรคluploki eraldamiseks. See on dรผnaamiline mรคlu jaotamise funktsioon, mida kasutatakse mรคlu eraldamiseks keerukatele andmestruktuuridele, nagu massiivid ja struktuurid. Kui see funktsioon ei suuda mรครคratud piisavalt ruumi eraldada, tagastab see nullkursori. Calloc funktsiooni tรคisvorm on kรผlgnev jaotamine.
Erinevus malloc() ja calloc() vahel
Siin 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 muutujale mitu mรคluplokki. |
| Funktsioon Malloc sisaldab prรผgi vรครคrtust. | Calloc funktsiooniga eraldatud mรคluplokk lรคhtestatakse alati nulliks. |
| Argumendi arv on 1. | Argumentide arv on 2. |
| Calloc on aeglasem kui malloc. | Malloc on kiirem kui calloc. |
| See pole callociga vรตrreldes turvaline. | Vรตrreldes mallociga on selle kasutamine turvaline. |
| Aja efektiivsus on kรตrgem kui calloc(). | Aja efektiivsus on madalam kui malloc(). |
| Funktsioon Malloc() tagastab ainult algusaadressi ega muuda seda nulliks. | Enne aadressi mรครคramist tagastab funktsioon Calloc() lรคhteaadressi ja muudab selle nulliks. |
| See ei teosta mรคlu lรคhtestamist. | See teostab mรคlu lรคhtestamist. |
malloc() sรผntaks
Siin on malloc() sรผntaks
ptr = (cast_type *) malloc (byte_size);
รlaltoodud sรผntaksis on ptr cast_type kursor. Funktsioon malloc tagastab kursori eraldatud mรคlule byte_size.
Example: ptr = (int *) malloc (50)
Kui see lause on edukalt tรคidetud, reserveeritakse 50 baiti suurune mรคluruum. Reserveeritud ruumi esimese baidi aadress mรครคratakse int tรผรผpi osutile โptrโ.
Calloc() sรผntaks
Siin on malloc() 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 nulliks. Tagatakse kursor, mis on hetkel eraldatud mรคluruumi esimesel baidil.
Malloc() nรคide C-s
Allolevas koodis kasutatakse suurust sizeof(*ptr) 15 tรคisarvuga mรคluploki eraldamiseks. Printf-lauses leiame 6. tรคisarvu vรครคrtuse.
#include<stdlib.h>
#include<stdio.h>
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:
6. tรคisarvu vรครคrtus on 480
Calloc() nรคide C-s
Allolev C-keele programm arvutab esimese kรผmne liikme summa. Kui kursori vรครคrtus on null, siis mรคluruumi ei eraldata.
For loopi kasutatakse muutuja โiโ vรครคrtuse itereerimiseks ja summa printimiseks. Lรตpuks kasutatakse kursori vabastamiseks funktsiooni free.
#include <stdio.h>
#include <stdlib.h>
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:
Esimese 10 liikme jadasumma koostamine ja arvutamine n Sum = 45
Miks kasutada malloc()?
Siin on malloc() kasutamise pรตhjused
- Kui peate kรคitusajal mรคlu eraldama, peaksite kasutama malloc().
- Peaksite kasutama malloci, kui peate eraldama objekte, mis peavad eksisteerima vรคljaspool praeguse mรคluploki kรคitamist.
- Valige malloc(), kui peate eraldama selle pinu suurusest suurema mรคlu.
- See tagastab kursori eraldatud ruumi esimesele baidile.
- See vรตimaldab arendajatel eraldada mรคlu tรคpselt vastavalt vajadusele.
- See funktsioon eraldab mรคluploki suuruse baitidest kuhjast.
Miks kasutada calloc()?
Siin on calloc() kasutamise pรตhjused
- Kui peate eraldatud mรคlu mรครคrama nulliks.
- Mรคluhunnikule juurdepรครคsu saamiseks vรตite kasutada calloci, mis tagastab kursori.
- Kasutatakse siis, kui teil on vaja elemendid nullida, et kursor mรคllu tagastada.
- รlevoolu vรคltimiseks, mis on vรตimalik malloc()
- Kasutage calloc() lehe taotlemiseks, mis on teadaolevalt juba nullitud.
