- 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
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!