C Programmering

SÅDAN BRUGES MALLOC-FUNKTION I C

SÅDAN BRUGES MALLOC-FUNKTION I C
Malloc er en indbygget funktion, der er erklæret i headerfilen . Malloc er det korte navn for 'hukommelsestildeling' og bruges til dynamisk at allokere en enkelt stor blok sammenhængende hukommelse i henhold til den angivne størrelse. Der er to typer hukommelsesallokering statisk og dynamisk. Statisk hukommelsesallokering udføres på kompileringstidspunktet, og den ændres ikke ved kørselstid. Dynamisk hukommelsesallokering allokerer hukommelse ved kørsel til dette; vi bruger malloc. Nu er det punktet, hvorfra denne hukommelse kommer, så alle dynamiske krav i C er opfyldt fra bunkehukommelsen. Grundlæggende vil vores applikation / program have 3 slags hukommelse

  • Stakhukommelse er lokal for hver metode, og når metoden vender tilbage, slettes stakken automatisk.
  • Det globale hukommelsesområde tildeler hukommelse til alle globale variabler. Dette hukommelsesområde oprettes i starten af ​​programmet, og til sidst rydder det automatisk hukommelsesområdet.
  • Heap-hukommelse er altid en fjende, der opfylder alle dynamiske krav til program / applikation. Hver gang vi skal bruge malloc-funktionen, låner den noget hukommelse fra bunken og giver os markøren til den.

Syntaks:

Syntaksen for malloc er (ugyldig *) malloc (størrelse_t størrelse). Så syntaksen siger, at malloc kræver en størrelse, det vil returnere markøren grundlæggende en ugyldig markør og størrelse t er defineret i som et usigneret heltal. Malloc-funktionen tildeler simpelthen en hukommelsesblok i henhold til størrelsen angivet i bunken, som du kan se i syntaksen, at størrelsen skal specificeres, og efter succes returnerer den en markør, der peger på den første byte i den tildelte hukommelse ellers returnerer NULL. Så, jobbet med malloc er at tildele hukommelse på køretid.

Hvorfor ugyldig markør:

Malloc har ikke en idé om, hvad den peger på; det betyder simpelthen, at det ikke ved, hvilke data der gemmes på den hukommelsesplacering. Det tildeler kun hukommelse, der er anmodet om af brugeren uden at vide, hvilken type data der skal lagres inde i hukommelsen. Derfor returnerer den en ugyldig markør.

Malloc allokerer bare hukommelse efter at det er brugerens ansvar at skrive en passende type, så den kan bruges korrekt i programmet. Ugyldig markør er en markør, der kan pege enhver type data malloc returnerer ugyldig markør, fordi den ikke ved, hvilken type data der bliver gemt inde i den hukommelse.

Her beder vi malloc om at allokere 6 byte hukommelse nu, hvis det en succes malloc vil returnere en ugyldig markør. I så fald er vi nødt til at skrive det til en heltalsmarkør, fordi vi vil gemme et heltal i den hukommelse. Her tildeler malloc 6 byte hukommelse i en bunke, og adressen på den første byte er gemt i markøren ptr.

Eksempel på program:

Her er et simpelt eksempelprogram for at forstå begrebet malloc på en ordentlig måde.

Her kan du se med printf-funktionen Jeg beder brugeren om at indtaste antallet af heltal. Vi har deklareret to variabler over i og n. Variabel n er det sted, hvor vi gemmer det nummer, der er indtastet af brugeren. Derefter har vi malloc-funktion; vi vil have malloc til at tildele størrelsesækvivalenten til størrelsen på n heltal. Vi multiplicerer størrelsen, hvis int med n; dette vil give os størrelsen på n heltal. Derefter returnerer malloc en ugyldig markør, og vi typestiller den til et heltal markør, og vi gemmer adressen i ptr-markøren. Typecasting er vigtigt, da det er en god praksis.

Hvis markøren nu indeholder NULL, betyder det, at hukommelsen ikke er tilgængelig. Så vi går simpelthen ud af programmet med status for afslutningsfejl. Hvis dette ikke er tilfældet, kan vi let køre for en loop.

Sløjfen løber fra 0 til n-1, og vi vil bede brugeren om at indtaste heltal en efter en hver gang. Inden for scanf-funktionen er der en ting skrevet ptr + i, da vi ved, at ptr indeholder adressen på den første byte af hukommelse. Lad os sige, at adressen er 1000 her, i er lig med nul oprindeligt, så 1000 + 0 er 1000, så inden for den adresse vil vores første heltal blive gemt, så derefter, når jeg bliver 1, så 1000 + 1, som internt har fortolket som (1000) +1 * 4 hvis jeg antager, at heltalets størrelse er 4 bytes, og det ville være lig med 1004, så det næste heltal gemmes inden for 1004 placering. Og dette fortsætter på denne måde adresserne er som 1000, 1004, 1008 og så videre. Vi bruger ikke ampersand før ptr + i, fordi ptr allerede giver os adressen, når vi skriver ptr, som simpelthen er en markør, og den indeholder adressen, ikke værdien, så der er ikke noget krav om at sætte ampersand foran den, og dette koncept skal være klart.

Her i denne sløjfe laver vi simpelthen en ting, vi udskriver alle heltal på skærmen; selvfølgelig bruger vi ptr + i, men her, i dette tilfælde, refererer vi til det, fordi ptr + i repræsenterer en adresse, så vi skal afferere den. Hvis jeg er lig med 0, vil det være 1000, fordi vi antager, at den første adresse er 1000, så vi refererer til den; vi får det første heltal, så er jeg lig med 1, og det bliver 1001, men fortolkes som 1004, hvis størrelsen på heltal er 4. Igen. Vi refererer til det, så det giver os 2nd heltal. På denne måde fungerer alt.

Så dette er dybest set et simpelt program, der beder brugerne om at indtaste et heltal, og så viser vi simpelthen disse heltal på skærmen. Efter udførelse af programmet vises dette.

Først beder vi brugeren om at indtaste antallet af heltal, og derefter indtaster brugeren heltalene, og vi viser dem simpelthen på skærmen.

Konklusion:

Der er ikke noget galt i ovenstående program, så længe vi fortsætter det i meget lang tid her låner vi hukommelse fra bunken, men vi returnerer aldrig hukommelsen tilbage til bunke, det sker kun i det tilfælde, hvor program / applikation har at køre i en lang varighed som 24 timer. De kalder malloc-funktion igen, og igen betyder det hver gang de låner hukommelse fra bunken og aldrig vender tilbage, dette er dårlig programmering, så vi skal skrive gratis (adressen på hukommelsen, der skal frigives), før vi vender tilbage. Så når du bruger malloc gratis, er det vigtigt. Så ved hjælp af malloc har vi bevaret hukommelse, og malloc tildeler hukommelse så stor som du beder om det.

Glad dynamisk hukommelsesallokering!

Nyttige værktøjer til Linux-spillere
Hvis du kan lide at spille spil på Linux, er chancerne for, at du måske har brugt apps og hjælpeprogrammer som Wine, Lutris og OBS Studio for at forbe...
HD Remastered-spil til Linux, der aldrig tidligere havde haft en Linux-udgivelse
Mange spiludviklere og udgivere kommer med HD-remaster af gamle spil for at forlænge franchisens levetid. Venligst fans, der anmoder om kompatibilitet...
Sådan bruges AutoKey til at automatisere Linux-spil
AutoKey er et desktopautomatiseringsværktøj til Linux og X11, programmeret i Python 3, GTK og Qt. Ved hjælp af dets scripting og MACRO-funktionalitet ...