Forskjell mellom Malloc og Realloc i C -programmering

Forskjell mellom Malloc og Realloc i C -programmering
Malloc () og realloc (); Begge funksjonene brukes til den dynamiske minnetildelingen, og i denne oppskrivningen vil vi diskutere sammenligningen av begge; realloc () og malloc () funksjoner i detalj. Men før vi forstår disse funksjonene, la oss diskutere forskjellen mellom statisk og dynamisk minne i C -programmering.

I C -programmering, når vi kjører et program, okkuperer det noe minne på systemet. Hvis vi bruker det statiske minnet, må vi tilordne en fast minneblokk fra systemet, og etter utførelsen av programmet kan to scenarier skje; Programmet vil enten trenge en større blokkstørrelse enn størrelsen erklært, eller det vil trenge den mindre størrelsesblokken av minne. Hvis minneblokken blir mindre for det utførte programmet, vil resultatene ikke være presise, og hvis blokkstørrelsen er større for det utførte programmet, er det gjenværende gratis minnet til blokken ikke nytte.

For å unngå dette, foretrekkes det å bruke dynamisk minne i C -programmering som har forskjellige typer funksjoner.

Hva er en malloc () -funksjon i C -programmering

I C -programmering, hvis vi bruker statisk minne, kan vi ikke endre minnestørrelsen under utførelsen av programmet. Det er en anbefalt praksis å bruke dynamisk minne i C -programmering, slik at minnestørrelse kan endres under utførelsen av programmet.

For bruk av dynamisk minne, må vi ta med en overskriftsfil “Stdlib.h ”, som inkluderer alle funksjonene til dynamisk minne. Malloc () er også medlem av stdlib.H bibliotek og brukes til å tilordne minne til det utførte programmet. Når en malloc () -funksjon kalles i et program, sender den en forespørsel til systemets haug, som enten tildeler den forespurte minneblokken til Malloc () -funksjonen eller vil returnere en nullverdi hvis det ikke er tilstrekkelig plass på den haug.

Malloc () ber om minneblokken i henhold til behovet til det utførte programmet, og når programmet blir utført med hell, kan vi returnere minneblokken tilbake til haugen ved å bruke gratis () -funksjonen, slik at den kan brukes til utførelsen av andre instruksjoner.

Den generelle syntaks for Malloc () -funksjonen er:

PTR_NAME = (Cast-type*) Malloc (størrelse);

Forklaringen på syntaks ovenfor er enkel:

  • Vi kan bruke et hvilket som helst navn for pekeren (pekeren brukes til å lagre adresser)
  • Da må vi erklære datatypen eller rollebesetningen for pekeren som Int og Char
  • Og til slutt ved å bruke Malloc () -funksjonen og inne i funksjonen, må vi nevne størrelsen på minnet som trengs

For en bedre forståelse vil vi vurdere et eksempel, lage en fil med navnet på mal_txt.c og skriv inn følgende skript:

#inkludere
#inkludere
int main ()
int a = 4, i, *ptr, s = 0;
ptr = (int *) malloc (a * sizeof (int));
if (ptr == null)
printf ("\ nerror! minne som ikke er tildelt.");
Avslutt (0);

printf ("\ nenter elementer av matrise:");
for (i = 0; i< a; ++i)
SCANF ("%D", PTR + I);
s + = *(ptr + i);

printf ("\ nsum: %d", s);
printf (“\ n”);
retur 0;

Å kompilere mal_txt.C -fil, vi bruker GCC -kompilatoren:

$ GCC MAL_TXT.c -o mal_txt

Når filen er satt sammen med suksess uten feil, utfører du koden ved hjelp av kommandoen:

$ ./mal_txt

I koden ovenfor oppretter vi matrisen og skriver ut summen av elementene i matrisen. En detaljert forklaring av programmet ovenfor er:

  • Vi har tatt med de to bibliotekene; stdlib.h for bruk av dynamiske minnefunksjoner og stdio.h for inngangs- og utgangsfunksjonene
  • Vi erklærte fire variabler A, S, I og *P hvor “ *” brukes med “P” fordi det er en peker og lagrer stedet i stedet for variabler
  • Vi benyttet Malloc () -funksjonen og brukte størrelsen på en variabel “A”, som betyr at den vil be om minnet fra haugen i henhold til størrelsen på “A” og pekeren “P” vil gå til starten av minnet tildelt
  • Så brukte vi "Hvis uttalelse", hvis haugen ikke har hatt tilstrekkelig minne, vil den returnere nullverdien, i dette tilfellet viser bare "feilen! minne som ikke er tildelt.”Bruke printf () -funksjonen
  • Hvis minnet er tildelt, vil det ved hjelp av SCANF () -funksjon ta fire elementer fra brukeren, beregne summen og lagre den i "S"
  • Til slutt, vil vise verdien av "S" som er summen av alle elementene i matrisen

Hva er en realloc () -funksjon i C -programmeringen

En annen funksjon av dynamisk minne er realloc () -funksjonen, den brukes til å endre minneblokken som er tilordnet Malloc () -funksjonen. Malloc () -funksjonen som omtalt ovenfor ber om en minneblokk fra haugen, men for å endre størrelsen på minneblokken slik at vi brukte RealLoc () -funksjonen i stedet for å slette hele minneblokken og innhente den nye minneblokken manuelt.

RealLoc () -funksjonen er den korte formen for "omfordeling av minnet", og den brukes til å endre størrelse på minneblokkstørrelsen tildelt av Heap to Malloc () eller Calloc () -funksjonen. Det forstyrrer ikke det opprinnelige innholdet i minneblokken og ber om den nye minneblokken fra haugen og kopierer alle dataene fra den gamle minneblokken til den nye minneblokken uten å forstyrre innholdet i den.

Den generelle syntaksen ved å bruke realloc () -funksjonen er:

$ PTR = realloc (PTR, nals);

Forklaringen på syntaks ovenfor er:

  • Bruk pekervariabelen som brukes med Malloc () -funksjonen
  • Bruk realloc () -funksjonen med parametrene; pekernavn og ny størrelse du vil tilordne det

Igjen oppretter vi en fil, real_file.c, og skriv koden i den for en bedre forståelse av bruken av realloc () -funksjon:

#inkludere
#inkludere
int main ()
int *ptr;
PTR = Malloc (200);
if (ptr == null)
printf ("Minnet er ikke tildelt.");
Avslutt (0);

PTR = Realloc (PTR, 400);
if (ptr!= Null)
printf ("Memory har vellykket tildelt \ n");
retur 0;

Nå kompiler real_filen.c Bruke GCC -kompilatoren:

$ gcc real_file.c -o real_file

Hvis filen er samlet, kjører du programmet ved å bruke kommandoen:

$ ./real_file

Forklaringen på skriptet ovenfor er:

  • Vi inkluderte to overskriftsfiler; stdlib.h for dynamiske minnefunksjoner og stdio.h for inngangs- og utgangsfunksjonene
  • Erklært pekervariabel *PTR
  • Brukte Malloc () -funksjonen og ba haugen for å tildele 200 byte, hvis minnet ikke er tildelt av haugen, “Minnet er ikke tildelt.”Vil vises ved hjelp av printf () -funksjonen
  • Hvis minnet er tildelt, vil det komme til RealLoc () -funksjonen og endre størrelse på minnet fra 100 byte til 400 byte
  • Hvis haugen tildelte den 500-byte minne; det vil vise (“Minnet har opprettet”)

Konklusjon

I C -programmering er dynamisk minnetildeling manuell tildeling av minne i henhold til programkravet. Malloc () og realloc () -funksjonene er en del av dynamisk minne; Malloc () brukes til minnetildeling og realloc () brukes til omfordeling av minnet. I denne oppskrivningen har vi forklart begge; Malloc () og realloc () -funksjoner, hvordan de fungerer, og hva er den generelle syntaksen ved å bruke dem begge. Til slutt, for en bedre forståelse, utførte vi eksemplene på begge funksjonene.