HVORDAN BRUKE MALLOC -FUNKSJONEN I C

How Use Malloc Function C



Malloc er en innebygd funksjon som er deklarert i toppteksten. Malloc er det korte navnet på 'minnetildeling' og brukes til dynamisk å tildele en enkelt stor blokk med sammenhengende minne i henhold til spesifisert størrelse. Det er to typer minnetildeling statisk og dynamisk. Statisk minnetildeling gjøres på kompileringstidspunktet, og den endres ikke ved kjøretid. Dynamisk minnetildeling er å allokere minne ved kjøretid for dette; vi bruker malloc. Nå er poenget hvorfra dette minnet kommer, så alle dynamiske krav i C er oppfylt fra haugminnet. I utgangspunktet vil applikasjonen/programmet ha tre typer minne

  • Stakkminne er lokalt for hver metode, og når metoden returnerer, sletter stakken den automatisk.
  • Det globale minneområdet tildeler minne for alle globale variabler. Dette minneområdet opprettes i begynnelsen av programmet, og til slutt tømmer det automatisk minneområdet.
  • Heap -minne er alltid fienden som oppfyller alle dynamiske krav til program/applikasjon. Når vi skal bruke malloc -funksjonen, kommer den til å låne litt minne fra haugen og gi oss pekeren til den.

Syntaks:





Syntaksen til malloc er (void*) malloc (size_t size). Så syntaksen sier at malloc krever en størrelse, det vil returnere pekeren i utgangspunktet en tom peker og størrelse t er definert som et usignert heltall. Malloc -funksjonen tildeler ganske enkelt en minneblokk i henhold til størrelsen som er angitt i haugen, slik du kan se i syntaksen at størrelsen må spesifiseres, og etter suksessen returnerer den en peker som peker til den første byten i det tildelte minnet, ellers returnerer NULL . Så, mallocs jobb er å tildele minne på kjøretid.



Hvorfor ugyldig peker:

Malloc har ikke en ide om hva det peker på; det betyr ganske enkelt at den ikke vet hvilke data som vil lagre på det minnestedet. Den tildeler bare minne forespurt av brukeren uten å vite hvilken type data som skal lagres inne i minnet. Derfor returnerer den en tom peker.



Malloc tildeler bare minne etter at det er brukerens ansvar å skrive på en passende type slik at den kan brukes riktig i programmet. Tom peker er en peker som kan peke alle typer data malloc returnerer ugyldig peker fordi den ikke vet hvilken type data som vil bli lagret inne i minnet.





Her ber vi malloc om å allokere 6 byte minne nå hvis malloc vil lykkes med en tom peker. I så fall må vi skrive det til en heltallstype peker fordi vi vil lagre et helt tall i det minnet. Her tildeler malloc 6 byte minne i en haug, og adressen til den første byten lagres i pekeren ptr.



Eksempelprogram:

Her er et enkelt eksempelprogram for å forstå begrepet malloc på en riktig måte.

Her kan du se med printf -funksjonen jeg ber brukeren om å angi antall heltall. Vi har erklært to variabler over i og n. Variabel n er stedet der vi vil lagre nummeret som er angitt av brukeren. Etter det har vi malloc -funksjon; vi vil at malloc skal tildele størrelsen som tilsvarer størrelsen på n heltall. Vi multipliserer størrelsen hvis int med n; dette vil gi oss størrelsen på n heltall. Etter det vil malloc returnere en tomromspeker, og vi skriver den til en heltallspeker, og vi lagrer adressen i ptr -pekeren. Typecasting er viktig ettersom det er en god praksis.

Hvis pekeren inneholder NULL, betyr det at minnet ikke er tilgjengelig. Så vi vil ganske enkelt avslutte programmet med statusen for feil ved utgang. Hvis dette ikke er tilfelle, kan vi enkelt kjøre for en loop.

Sløyfen løper fra 0 til n-1, og vi vil be brukeren om å skrive inn heltall en etter en hver gang. Innen scanf -funksjonen er det én ting skrevet ptr+i som vi vet at ptr inneholder adressen til den første byten i minnet. La oss si at adressen er 1000 her i er lik null i utgangspunktet, så 1000+0 er 1000, så i den adressen blir vårt første heltall lagret, deretter etter at når jeg blir 1 så 1000+1 som internt har blitt tolket som (1000) +1 *4 hvis jeg antar at størrelsen på heltallet er 4 byte, og det ville være lik 1004, så det neste heltallet vil bli lagret innenfor 1004 plassering. Og dette vil fortsette på denne måten adressene er som 1000, 1004, 1008 og så videre. Vi bruker ikke ampersand før ptr+i fordi ptr allerede gir oss adressen når vi skriver ptr, som ganske enkelt er en peker, og den inneholder adressen, ikke verdien, så det er ikke noe krav om å sette ampersand foran den, og dette konseptet bør være klart.

Her i denne sløyfen gjør vi ganske enkelt en ting, vi skriver ut alle heltallene på skjermen; åpenbart, vi bruker ptr+i, men her, i dette tilfellet, dereferferenserer vi det fordi ptr+i representerer en adresse, så vi må differensiere den. Hvis jeg er lik 0, vil det være 1000 fordi vi antar at den første adressen vil være 1000, så vi refererer det; vi får det første heltallet da i er lik 1, og det blir 1001, men tolkes som 1004 hvis størrelsen på heltallet er 4. Igjen. Vi refererer det, så det vil gi oss 2ndheltall. På denne måten fungerer alt.

Så dette er i utgangspunktet et enkelt program som ber brukerne om å skrive inn et heltall, og så viser vi ganske enkelt disse heltallene på skjermen. Etter at programmet er utført, vises dette.

Først ber vi brukeren om å angi antall heltall, og deretter skriver brukeren inn heltallene, og vi viser dem bare på skjermen.

Konklusjon:

Det er ingenting galt i programmet ovenfor, så lenge vi fortsetter det veldig lenge her låner vi minne fra haugen, men vi returnerer aldri minnet tilbake til haugen, det skjer bare i tilfelle der programmet/applikasjonen har å kjøre i lang tid som 24 timer. De vil ringe malloc -funksjonen igjen, og igjen betyr det at hver gang de låner minne fra haugen og aldri kommer tilbake, er dette dårlig programmering, så vi bør skrive gratis (minnets adresse som skal slippes) før vi returnerer. Så når du bruker malloc gratis er det viktig. Så ved å bruke malloc har vi bevart minne, og malloc tildeler minne så stort som du ber det om.

Glad dynamisk minnetildeling!