Forskellen mellem calloc og malloc

Indholdsfortegnelse:

Forskellen mellem calloc og malloc
Forskellen mellem calloc og malloc

Video: Forskellen mellem calloc og malloc

Video: Forskellen mellem calloc og malloc
Video: CS50 2013 - Week 5, continued 2024, November
Anonim

Nøgleforskel – calloc vs malloc

I programmering er det nødvendigt at gemme data. Data gemmes i hukommelsen. Disse hukommelsesplaceringer er kendt som variabler. Hver variabel har en bestemt type. De kan være heltal, flydende, doubler, tegn osv. Der er også datastrukturer, der kan lagre en sekventiel samling af fast størrelse af elementer af samme type. Det er en matrix. Programmøren skal erklære array-størrelsen. Hvis programmøren erklærer en matrix af heltal for fem elementer, er det ikke muligt at tildele en værdi til et indeks, der er højere end den deklarerede størrelse. Hukommelsesallokeringen er fast, og den kan ikke ændres under kørsel. En anden hukommelsestildelingsmetode er dynamisk hukommelsestildeling. Dynamisk hukommelsesallokering hjælper med at allokere mere hukommelse, når det er nødvendigt, og frigive, når det er nødvendigt. Header-filen har fire funktioner til dynamisk hukommelsesallokering. calloc og malloc er to sådanne funktioner. Den vigtigste forskel mellem calloc og malloc er, at calloc allokerer hukommelsen og også initialiserer de tildelte hukommelsesblokke til nul, mens malloc allokerer hukommelsen, men initialiserer ikke den tildelte hukommelse til nul. Adgang til indholdet i calloc vil give nul, men malloc vil give en skraldværdi.

Hvad er calloc?

Hukommelsestildeling er processen med at tildele hukommelse til de eksekverende programmer. Nogle gange er det nødvendigt at ændre størrelsen på hukommelsen. Derfor bruges dynamisk hukommelsesallokering. Det gøres ved hjælp af pointere. Pointere er referencevariabler, der holder adressen på en anden variabel.

Forskellen mellem calloc og malloc
Forskellen mellem calloc og malloc

Figur 01: calloc og malloc

calloc står for "sammenhængende tildeling". Den tildeler flere hukommelsesblokke med samme størrelse. Syntaksen for calloc er som følger. Det kræver to argumenter. De er antallet af blokke og størrelsen af hver blok. Funktionen calloc returnerer en void pointer, så en cast-operator bruges til at returnere pointertype i henhold til den påkrævede datatype.

voidcalloc(size_t num, size_t size);

Se nedenstående enkle C-program.

include

include

int main(){

int ptr=(int) calloc(20, sizeof(int));

if (ptr==NULL){

printf(“Hukommelsen er ikke allokeret”);

}

else{

printf(“Hukommelsen er tildelt”);

}

retur 0;

}

I henhold til ovenstående program tildeles en sammenhængende hukommelsesblok, som kan indeholde 20 elementer. Hver vil have størrelsen af et heltal. Størrelsen af(int) bruges, fordi heltalstypen varierer fra compiler til compiler.

Hvis hukommelsestildelingen lykkes, returnerer den basisadressen for hukommelsesblokken. Det betyder, at pointer ptr nu peger på basisadressen for den hukommelsesblok. Alle tildelte områder initialiseres til nuller. Den udskriver meddelelsen Memory Allocated. Hvis hukommelsestildelingen mislykkes, returnerer den nul-markøren. Derfor udskrives meddelelsen Hukommelse er ikke tildelt.

Hvad er malloc?

Malloc-funktionen bruges til at allokere den nødvendige mængde bytes i hukommelsen. Syntaksen for malloc er som følger. Størrelsen repræsenterer den nødvendige hukommelse i bytes.

void malloc(size_t_size);

Funktionen malloc returnerer en void pointer, så en cast operator bruges til at returnere pointer type i henhold til den påkrævede datatype.

Se nedenstående simple C-program med malloc-funktion.

include

include

int main(){

int ptr=(int) malloc (10sizeof(int));

if (ptr==NULL){

printf(“Hukommelsen er ikke allokeret”);

}

else{

printf(“Hukommelsen er tildelt”);

}

retur 0;

}

I henhold til ovenstående program vil hukommelsesblok blive tildelt. Markøren peger på startadressen for den tildelte hukommelse. Den returnerede pointer konverteres til en heltalstype. Hvis hukommelsen er allokeret, udskrives meddelelsen hukommelsen er allokeret. Hvis hukommelsen ikke er allokeret, vil en nul-markør returnere. Derfor er hukommelsen ikke tildelt beskeden udskrives.

Hvad er lighederne mellem calloc og malloc?

  • Begge disse funktioner er deklareret i header-filen. Det er standardbibliotekets header-fil.
  • Begge funktioner bruges til dynamisk hukommelsesallokering.
  • Markøren, der returneres af calloc og malloc, skal castes til den specifikke type.
  • Ved vellykket hukommelsesallokering vil begge funktioner returnere en pointer med basisadressen for hukommelsesblokken.
  • Hvis hukommelsestildelingen mislykkes, returneres en nul-markør.

Hvad er forskellen mellem calloc og malloc?

calloc vs malloc

calloc er en funktion til dynamisk hukommelsesallokering i C-sprog stdlib.h header-fil, der allokerer et bestemt antal bytes og initialiserer dem til nul. malloc er en funktion til dynamisk hukommelsesallokering i C-sprog stdlib.h header-fil, der allokerer et bestemt antal bytes.
Betydning
calloc står for sammenhængende tildeling. malloc står for memory allocation.
Syntaks
calloc følger en syntaks, der ligner void calloc(size_t_num, size_t size); malloc følger en syntaks, der ligner void malloc(size_t_size);.
Antal argumenter
calloc tager to argumenter. De er et antal blokke og størrelsen af hver blok. malloc tager et argument. Det er et antal bytes.
Speed
calloc tager lidt længere tid end malloc. Det er på grund af det ekstra trin med at initialisere den allokerede hukommelse med nul. malloc er hurtigere end calloc.

Oversigt – calloc vs malloc

I statisk hukommelsesallokering, f.eks. ved hjælp af arrays, er hukommelsen fast. Hvis få elementer er gemt, så er resten af hukommelsen spildt. Det kan også forårsage fejl, når den allokerede hukommelse er lille end den nødvendige hukommelse. Derfor bruges dynamisk hukommelsesallokering. I C-sprog giver calloc og malloc dynamisk hukommelsesallokering. Forskellen mellem calloc og malloc er, at calloc allokerer hukommelse og også initialiserer de allokerede hukommelsesblokke til nul, mens malloc allokerer hukommelsen, men ikke initialiserer hukommelsesblokke til nul. Malloc tager to argumenter, mens calloc tager to argumenter.

Download PDF'en af calloc vs malloc

Du kan downloade PDF-versionen af denne artikel og bruge den til offline-formål i henhold til citatnotat. Download venligst PDF-versionen her: Forskellen mellem calloc og malloc

Anbefalede: