Forskellen mellem malloc() og calloc()
Nรธgleforskelle mellem malloc() vs calloc()
- malloc()-funktionen returnerer kun startadressen og gรธr den ikke nul, pรฅ den anden side returnerer calloc()-funktionen startadressen og gรธr den til nul.
- I malloc-funktionen er antallet af argumenter 1, mens antallet af argumenter i calloc-funktionen er 2.
- malloc() tidseffektivitet er hรธjere end calloc(), hvorimod malloc() ikke er sikker sammenlignet med calloc()
- malloc initialiserer ikke hukommelse, hvorimod calloc udfรธrer hukommelsesinitialisering.

Hvad er dynamisk hukommelsesallokering?
Dynamisk hukommelsestildeling er en proces til at allokere hukommelse pรฅ kรธretid. Der er fire biblioteksrutiner, calloc(), free(), realloc(), og malloc() som kan bruges til at allokere hukommelse og frigรธre den under programafviklingen. Disse rutiner er defineret i header-filen kaldet stdlib.h.
Hvad er malloc() ?
Det er en funktion, som bruges til at allokere en hukommelsesblok dynamisk. Den reserverer hukommelsesplads af specificeret stรธrrelse og returnerer nul-markรธren, der peger pรฅ hukommelsesplaceringen.
Den returnerede markรธr er normalt af typen void. Det betyder, at vi kan tildele malloc-funktion til enhver pointer. Den fulde form for malloc er hukommelsestildeling.
Hvad er calloc() ?
Calloc() funktion bruges til at allokere flere hukommelsesblokke. Det er en dynamisk hukommelsesallokeringsfunktion, som bruges til at allokere hukommelsen til komplekse datastrukturer sรฅsom arrays og strukturer. Hvis denne funktion ikke kan tildele nok plads som angivet, returnerer den null pointer. Den fulde form for calloc-funktion er sammenhรฆngende tildeling.
Forskellen mellem malloc() og calloc()
Her er vigtige forskelle mellem malloc() vs calloc():
| malloc () | calloc() |
|---|---|
| Malloc()-funktionen vil skabe en enkelt hukommelsesblok af stรธrrelse specificeret af brugeren. | Calloc()-funktionen kan tildele flere hukommelsesblokke til en variabel. |
| Malloc-funktionen indeholder skraldvรฆrdi. | Hukommelsesblokken tildelt af en calloc-funktion initialiseres altid til nul. |
| Antallet af argumenter er 1. | Antallet af argumenter er 2. |
| Calloc er langsommere end malloc. | Malloc er hurtigere end calloc. |
| Det er ikke sikkert sammenlignet med calloc. | Det er sikkert at bruge sammenlignet med malloc. |
| Tidseffektiviteten er hรธjere end calloc(). | Tidseffektiviteten er lavere end malloc(). |
| Malloc()-funktionen returnerer kun startadressen og gรธr den ikke nul. | Inden adressen tildeles, returnerer funktionen Calloc() startadressen og gรธr den til nul. |
| Den udfรธrer ikke initialisering af hukommelsen. | Den udfรธrer hukommelsesinitialisering. |
Syntaks for malloc()
Her er en syntaks for malloc()
ptr = (cast_type *) malloc (byte_size);
I ovenstรฅende syntaks er ptr en pointer af cast_type. Malloc-funktionen returnerer en pointer til den tildelte hukommelse af byte_size.
Example: ptr = (int *) malloc (50)
Nรฅr denne sรฆtning udfรธres korrekt, reserveres en hukommelsesplads pรฅ 50 bytes. Adressen pรฅ den fรธrste byte af reserveret plads er tildelt til markรธren "ptr" af typen int.
Syntaks for calloc()
Her er en syntaks for malloc()
ptr = (cast_type *) calloc (n, size);
Ovenstรฅende syntaks bruges til at allokere n hukommelsesblokke af samme stรธrrelse. Efter at hukommelsespladsen er allokeret, initialiseres alle bytes til nul. Pointeren, som i รธjeblikket er ved den fรธrste byte af den tildelte hukommelsesplads, returneres.
Eksempel pรฅ malloc() i C
I koden nedenfor bruges sizeof(*ptr) til at allokere en hukommelsesblok pรฅ 15 heltal. I printf-sรฆtningen finder vi vรฆrdien af โโdet 6. heltal.
#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));
}
}
Output:
Vรฆrdien af โโdet 6. heltal er 480
Eksempel pรฅ calloc() i C
C-sprogprogrammet nedenfor beregner summen af โโde fรธrste ti led. Hvis pointervรฆrdien er nul, vil hukommelsespladsen ikke blive tildelt.
For loop bruges til at iterere vรฆrdien af โโen variabel "i" og udskrive summen. Endelig bruges funktion fri til at frigรธre markรธren.
#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;
}
Output:
Opbygning og beregning af sekvenssummen af โโde fรธrste 10 led n Sum = 45
Hvorfor bruge malloc() ?
Her er grundene til at bruge malloc()
- Du bรธr bruge malloc() nรฅr du skal allokere hukommelse ved runtime.
- Du bรธr bruge malloc, nรฅr du skal allokere objekter, som skal eksistere ud over udfรธrelsen af โโden aktuelle hukommelsesblok.
- Gรฅ efter malloc(), hvis du har brug for at allokere hukommelse stรธrre end stรธrrelsen pรฅ den stak.
- Det returnerer markรธren til den fรธrste byte af tildelt plads.
- Det gรธr det muligt for udviklere at allokere hukommelse, efterhรฅnden som den er nรธdvendig i den nรธjagtige mรฆngde.
- Denne funktion tildeler en hukommelsesblokstรธrrelse pรฅ bytes fra heapen.
Hvorfor bruge calloc() ?
Her er grundene til at bruge calloc()
- Nรฅr du skal indstille allokeret hukommelse til nul.
- Du kan bruge calloc, der returnerer en markรธr for at fรฅ adgang til hukommelsesbunken.
- Bruges nรฅr du skal initialisere elementerne til nul for at returnere en markรธr til hukommelsen.
- For at forhindre overlรธb, der er muligt med malloc()
- Brug calloc() til at anmode om en side, der allerede er nulstillet.
