C Programmering

SLIK BRUKER DU MALLOC-FUNKSJON I C

SLIK BRUKER DU MALLOC-FUNKSJON I C
Malloc er en innebygd funksjon som er deklarert i toppteksten . Malloc er kortnavnet for 'minnetildeling' og brukes til å dynamisk tildele en enkelt stor blokk med sammenhengende minne i henhold til den angitte størrelsen. Det er to typer minnetildeling statisk og dynamisk. Statisk minnetildeling gjøres på kompileringstidspunktet, og det endres ikke ved kjøretid. Dynamisk minnetildeling tildeler minne ved kjøretid for dette; vi bruker malloc. Nå er poenget hvor fra dette minnet kommer, så alle dynamiske krav i C oppfylles fra heapminnet. I utgangspunktet vil applikasjonen / programmet vårt ha tre typer minne

  • Stackminne er lokalt for hver metode, og når metoden returnerer, tømmer stack 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.
  • Heapminne er alltid fiende som oppfyller alle dynamiske krav til program / applikasjon. Hver gang vi skal bruke malloc-funksjonen, vil den låne noe minne fra dyngen 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, den vil returnere pekeren i utgangspunktet en tom peker og størrelse t er definert i som et usignert heltall. Malloc-funksjonen tildeler ganske enkelt en minneblokk i henhold til størrelsen som er angitt i bunken, slik du kan se i syntaksen at størrelsen må spesifiseres, og på suksess returnerer den en peker som peker på den første byten i det tildelte minnet, ellers returnerer NULL. Så, jobben til malloc er å tildele minne på kjøretid.

Hvorfor ugyldig peker:

Malloc har ikke peiling på hva den peker på; det betyr ganske enkelt at den ikke vet hvilke data som skal lagres på det minneplasseringen. Den tildeler bare minne som brukeren krever uten å vite hvilken type data som skal lagres i minnet. Det er derfor det returnerer en tom peker.

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

Her ber vi malloc om å tildele 6 byte minne nå hvis det en suksess malloc vil returnere en tom peker. I så fall må vi skrive det til en heltalspeker fordi vi vil lagre et heltall i det minnet. Her tildeler malloc 6 byte minne i en haug, og adressen til den første byten er lagret i pekeren ptr.

Eksempel på program:

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

Her kan du se med printf-funksjonen jeg ber brukeren om å oppgi antall heltall. Vi har deklarert 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 tom peker, og vi skriver den til en heltallspeker, og vi lagrer adressen i ptr-pekeren. Typecasting er viktig da det er en god praksis.

Nå, hvis pekeren inneholder NULL, betyr det at minnet ikke er tilgjengelig. Så vi vil ganske enkelt gå ut av programmet med statusen for avslutningsfeil. Hvis dette ikke er tilfelle, kan vi enkelt kjøre for en loop.

Sløyfen vil gå fra 0 til n-1, og vi vil be brukeren om å legge inn heltall en etter en hver gang. Innen scanf-funksjonen er det en ting skrevet ptr + i da vi vet at ptr inneholder adressen til den første byten av 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, og deretter blir det når jeg blir 1 så 1000 + 1 som har internt tolket som (1000) +1 * 4 hvis jeg antar at størrelsen på heltallet er 4 byte, og det ville være lik 1004, så neste heltall lagres innen 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 før den, og dette konseptet skal være tydelig.

Her i denne sløyfen gjør vi ganske enkelt en ting vi skriver ut alle heltallene på skjermen; tydeligvis bruker vi ptr + i, men her, i dette tilfellet, refererer vi til det fordi ptr + i representerer en adresse, så vi må referere 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 til den; vi får det første heltallet, da er jeg lik 1, og det blir 1001 men tolkes som 1004 hvis størrelsen på heltallet er 4. En gang til. Vi refererer til det, så det vil gi oss 2nd heltall. 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 å oppgi antall heltall, og deretter skriver brukeren inn heltallene, og vi viser dem ganske enkelt på skjermen.

Konklusjon:

Det er ikke noe galt i ovennevnte program så lenge vi fortsetter det i veldig lang tid her, vi låner minne fra dyngen, men vi returnerer aldri minnet tilbake til dyngen, det skjer bare i det tilfellet hvor programmet / applikasjonen har å løpe i lang tid som 24 timer. De vil ringe malloc-funksjon igjen, og igjen betyr det hver gang de låner minne fra haugen og aldri kommer tilbake, dette er dårlig programmering, så vi bør skrive gratis (adressen til minnet som skal frigjøres) før vi kommer tilbake. Så når du bruker malloc gratis er det viktig. Så ved bruk av malloc har vi bevart minne, og malloc tildeler minne så stort som du ber om det.

Glad dynamisk minnetildeling!

Gratis og åpen kildekode-spillmotorer for utvikling av Linux-spill
Denne artikkelen vil dekke en liste over gratis og open source-spillmotorer som kan brukes til å utvikle 2D- og 3D-spill på Linux. Det er mange slike ...
Shadow of the Tomb Raider for Linux Tutorial
Shadow of the Tomb Raider er det tolvte tilskuddet til Tomb Raider-serien - et action-eventyrspill-franchise opprettet av Eidos Montreal. Spillet ble ...
Hvordan øke FPS i Linux?
FPS står for Bilder per sekund. FPSs oppgave er å måle bildefrekvensen i videoavspilling eller spillprestasjoner. Med enkle ord betegnes antall uavbru...