C Programmering

HUR DU ANVÄNDER MALLOC-FUNKTION I C

HUR DU ANVÄNDER MALLOC-FUNKTION I C
Malloc är en inbyggd funktion som deklareras i rubrikfilen . Malloc är det korta namnet på 'minnestilldelning' och används för att dynamiskt allokera ett enda stort block av sammanhängande minne enligt den angivna storleken. Det finns två typer av statisk och dynamisk minnestilldelning. Statisk minnestilldelning görs vid sammanställningstid och ändras inte vid körning. Dynamisk minnesallokering allokerar minne vid körning för detta; vi använder malloc. Nu är poängen varifrån detta minne kommer, så alla dynamiska krav i C uppfylls från heapminnet. I grund och botten kommer vårt program / program att ha tre typer av minne

  • Stackminne är lokalt för varje metod, och när metoden återgår rensas stacken automatiskt.
  • Det globala minnesområdet tilldelar minne för alla globala variabler. Detta minnesområde skapas i början av programmet och i slutändan raderar det automatiskt minnesområdet.
  • Heapminne är alltid fiende som uppfyller alla dynamiska krav för program / applikation. När vi ska använda malloc-funktionen kommer det att låna lite minne från högen och ge oss pekaren till den.

Syntax:

Syntaxen för malloc är (void *) malloc (size_t size). Så syntaxen säger att malloc kräver en storlek, det kommer att returnera pekaren i princip en tom pekare och storlek t definieras i som ett osignerat heltal. Malloc-funktionen tilldelar helt enkelt ett minnesblock enligt storleken som anges i högen som du kan se i syntaxen att storleken måste specificeras och, efter framgång, returnerar den en pekare som pekar på den första byten i det tilldelade minnet annars returnerar NULL. Så jobbet för malloc är att fördela minne på körtid.

Varför ogiltig pekare:

Malloc har ingen aning om vad den pekar på; det betyder helt enkelt att det inte vet vilken data som kommer att lagras på minnesplatsen. Den tilldelar bara minne som begärs av användaren utan att veta vilken typ av data som ska lagras i minnet. Det är därför det returnerar en tom pekare.

Malloc allokerar bara minne efter det är det användarens ansvar att skriva till en lämplig typ så att den kan användas ordentligt i programmet. Tömpekare är en pekare som kan peka på vilken typ av data som helst malloc returnerar ogiltig pekare eftersom den inte vet vilken typ av data som kommer att lagras i det minnet.

Här ber vi malloc att allokera 6 byte minne nu om det en framgång malloc kommer att returnera en tom pekare. I så fall måste vi skriva det till en heltalstyppekare eftersom vi vill lagra ett heltal i det minnet. Här tilldelar malloc 6 byte minne i en hög, och adressen till den första byten lagras i pekaren ptr.

Exempel på program:

Här är ett enkelt exempelprogram för att förstå begreppet malloc på ett korrekt sätt.

Här kan du se med printf-funktionen Jag ber användaren att ange antalet heltal. Vi har deklarerat två variabler ovanför i och n. Variabel n är den plats där vi kommer att lagra det nummer som användaren har angett. Efter det har vi malloc-funktion; vi vill att malloc ska allokera storlekskvoten till storleken på n heltal. Vi multiplicerar storleken om int med n; detta ger oss storleken på n heltal. Efter det kommer malloc att returnera en tom pekare, och vi skriver den till en helpekare och vi lagrar adressen i ptr-pekaren. Typprognoser är viktigt eftersom det är en bra praxis.

Om pekaren innehåller NULL betyder det att minnet inte är tillgängligt. Så vi kommer helt enkelt att lämna programmet med status för utgångsfel. Om detta inte är fallet kan vi enkelt köra för en loop.

Slingan går från 0 till n-1, och vi kommer att be användaren att ange heltal en efter en varje gång. Inom scanf-funktionen finns det en sak skriven ptr + i eftersom vi vet att ptr innehåller adressen till den första byten i minnet. Låt oss säga att adressen är 1000 här är jag lika med noll initialt så 1000 + 0 är 1000 så inom den adressen kommer vårt första heltal att lagras sedan efter det när jag blir 1 så 1000 + 1 som internt har tolkats som (1000) +1 * 4 om jag antar att storleken på heltalet är 4 byte, och det skulle vara lika med 1004, så nästa heltal kommer att lagras inom 1004 plats. Och detta kommer att fortsätta på detta sätt adresserna är som 1000, 1004, 1008 och så vidare. Vi använder inte ampersand före ptr + i eftersom ptr redan ger oss adressen när vi skriver ptr, som helt enkelt är en pekare, och den innehåller adressen, inte värdet, så det finns inget krav på att sätta ampersand före det, och detta koncept borde vara tydligt.

Här i den här slingan gör vi helt enkelt en sak vi skriver ut alla heltal på skärmen; uppenbarligen använder vi ptr + i, men här, i det här fallet, hänvisar vi till det eftersom ptr + i representerar en adress, så vi måste göra det. Om jag är lika med 0 blir det 1000 eftersom vi antar att den första adressen är 1000, så vi hänvisar till den; vi får det första heltalet då är jag lika med 1, och det blir 1001 men tolkas som 1004 om storleken på heltalet är 4. Om igen. Vi refererar till det, så det kommer att ge oss 2nd heltal. På det här sättet fungerar allt.

Så detta är i grunden ett enkelt program som ber användarna att ange n heltal, och sedan visar vi helt enkelt dessa heltal på skärmen. Efter att programmet har körts visas detta.

Först ber vi användaren att ange antalet heltal och sedan anger användaren heltalet och vi visar dem helt enkelt på skärmen.

Slutsats:

Det finns inget fel i ovanstående program så länge vi fortsätter det under en mycket lång tid här lånar vi minne från högen, men vi returnerar aldrig minnet tillbaka till högen det händer bara i det fall då program / applikation har att springa under en lång varaktighet som 24 timmar. De kommer att ringa malloc-funktionen igen, och igen betyder det varje gång de lånar minne från högen och aldrig återvänder, det här är dålig programmering, så vi borde skriva gratis (minnesadressen som ska släppas) innan vi återvänder. Så när du använder malloc gratis är viktigt. Så med malloc har vi bevarat minne och malloc fördelar minnet så stort som du ber om det.

Lyckligt dynamiskt minne allokering!

Hur man visar OSD-överlägg i helskärms Linux-appar och -spel
Att spela helskärmsspel eller använda appar i distraktionsfritt helskärmsläge kan avskärma dig från relevant systeminformation som syns i en panel ell...
Topp 5 spelinspelningskort
Vi har alla sett och älskat streaming av spel på YouTube. PewDiePie, Jakesepticye och Markiplier är bara några av de bästa spelarna som har tjänat mil...
Hur man utvecklar ett spel på Linux
För ett decennium sedan skulle inte många Linux-användare förutsäga att deras favoritoperativsystem en dag skulle vara en populär spelplattform för ko...