C Programmeerimine

KUIDAS MALLOC-FUNKTSIOONI KASUTADA C-s

KUIDAS MALLOC-FUNKTSIOONI KASUTADA C-s
Malloc on päisefailis deklareeritud sisseehitatud funktsioon . Malloc on "mälu jaotamise" lühinimi ja seda kasutatakse ühe suure külgneva mälu ploki dünaamiliseks eraldamiseks vastavalt määratud suurusele. Staatilist ja dünaamilist mälu jaotust on kahte tüüpi. Staatiline mälu eraldamine toimub kompileerimise ajal ja see ei muutu käituse ajal. Dünaamiline mälu eraldamine eraldab selle jaoks käituse ajal mälu; me kasutame malloci. Nüüd on punkt, kust see mälu tuleb, nii et kõik C-dünaamilised nõuded täidetakse kuhja mälust. Põhimõtteliselt on meie rakendusel / programmis 3 tüüpi mälu

  • Virnamälu on iga meetodi jaoks lokaalne ja kui meetod naaseb, puhastab virn selle automaatselt.
  • Globaalne mälupiirkond eraldab mälu kõigile globaalsetele muutujatele. See mälupiirkond luuakse programmi alguses ja lõpuks puhastab see mälupinna automaatselt.
  • Kuhumälu on alati vaenlane, kes täidab kõiki programmi / rakenduse dünaamilisi nõudeid. Alati, kui hakkame malloc-funktsiooni kasutama, laenab see hunnikust mälu ja annab meile sellele näpunäite.

Süntaks:

Malloci süntaks on (void *) malloc (size_t size). Nii et süntaks ütleb, et malloc nõuab suurust, tagastab kursori põhimõtteliselt tühise kursori ja suurus t on määratletud allkirjata täisarvuna. Funktsioon Malloc eraldab mäluplokki lihtsalt kuhjas määratud suuruse järgi, nagu näete süntaksis, et suurus tuleb täpsustada ja edukuse korral tagastab eraldatud mälu esimesele baidile osutava osuti, muidu tagastab NULL. Niisiis, malloci ülesandeks on eraldada tööajaga mälu.

Miks tühistada kursor:

Mallocil pole aimugi, millele ta osutab; see tähendab lihtsalt, et ta ei tea, milliseid andmeid sellesse mälukohta salvestatakse. See lihtsalt eraldab kasutaja soovitud mälu, teadmata mällu salvestatavate andmete tüüpi. Sellepärast tagastab see tühise osuti.

Malloc eraldab lihtsalt mälu pärast seda, kasutaja on kohustatud sisestama sobiva tüübi, et seda saaks programmis õigesti kasutada. Tühine osuti on osuti, mis võib osutada mis tahes tüüpi andmetele. Malloc tagastab tühise kursori, kuna see ei tea, mis tüüpi andmeid sellesse mällu salvestatakse.

Siin palume mallocil eraldada nüüd 6 baiti mälu, kui õnnestub, et malloc tagastab tühise osuti. Sel juhul peame selle sisestama täisarvutüübiks, kuna soovime sellesse mällu salvestada täisarvu. Siin eraldab malloc kuue baiti mälu ja esimese baidi aadress salvestatakse osuti ptr.

Näidisprogramm:

Siin on lihtne näidisprogramm, et mõista malloki mõistet õigesti.

Siin näete funktsiooni printf abil, et palun kasutajal sisestada täisarvude arv. Oleme deklareerinud kaks muutujat i ja n kohal. Muutuja n on koht, kuhu salvestame kasutaja sisestatud numbri. Pärast seda on meil malloc funktsioon; soovime, et malloc eraldaks suuruse ekvivalendi n täisarvu suurusega. Korrutame suuruse, kui int on n; see annab meile n täisarvu suuruse. Pärast seda tagastab malloc tühise osuti ja me sisestame selle täisarvukursoriks ning salvestame aadressi ptr-osuti. Kirjutamine on oluline, kuna see on hea tava.

Kui osuti sisaldab NULL, tähendab see, et mälu pole saadaval. Niisiis väljume programmist lihtsalt väljumisvea olekuga. Kui see pole nii, saame hõlpsasti käivitada a for loop.

Tsükkel kestab vahemikus 0 kuni n-1 ja palume kasutajal sisestada iga kord täisarv ükshaaval. Funktsioonis scanf on kirjutatud üks asi ptr + i, kuna teame, et ptr sisaldab mälu esimese baidi aadressi. Oletame, et siin on aadress 1000, nii et i on algselt võrdne nulliga, nii et 1000 + 0 on 1000, nii et selle aadressi sees meie esimene täisarv salvestatakse, siis pärast seda, kui i saab 1, siis 1000 + 1, mis on sisemiselt tõlgendatud (1000) +1 * 4, kui eeldan, et täisarvu suurus on 4 baiti ja see oleks võrdne 1004-ga, siis järgmine täisarv salvestatakse 1004 asukohta. Ja see jätkub sel viisil, nagu aadressid on 1000, 1004, 1008 ja nii edasi. Me ei kasuta ampersandit enne ptr + i, sest ptr annab meile aadressi juba ptr kirjutamisel, mis on lihtsalt osuti ja see sisaldab aadressi, mitte väärtust, seega pole ampersandi selle ette asetamise nõuet ja see mõiste peaks olema selge.

Selles ringis teeme lihtsalt ühte asja, printime ekraanile kõik täisarvud; ilmselgelt kasutame ptr + i, kuid siin me käesoleval juhul sellest loobume, kuna ptr + i tähistab aadressi, seega peame sellest kõrvale jätma. Kui ma olen võrdne 0-ga, on see 1000, kuna eeldame, et esimene aadress on 1000, seega me teeme sellest järelduse; saame esimese täisarvu i võrdseks 1 ja see saab 1001, kuid tõlgendatuna kui 1004, kui täisarvu suurus on 4. Jälle. Me loobume sellest, nii et see annab meile 2nd täisarv. Nii toimib kõik.

See on põhimõtteliselt lihtne programm, mis palub kasutajatel sisestada n täisarvu ja siis kuvame need täisarvud lihtsalt ekraanil. Pärast programmi käivitamist kuvatakse see.

Esiteks palume kasutajal sisestada täisarvude arv ja seejärel sisestab kasutaja täisarvud ja kuvame need lihtsalt ekraanil.

Järeldus:

Ülaltoodud programmis pole midagi valesti, kui me jätkame seda väga pikka aega, siin laename hunnikust mälu, kuid me ei tagasta mälu kunagi kuhjaga. See juhtub ainult sel juhul, kui programm / rakendus on joosta pikka aega nagu 24 tundi. Nad kutsuvad uuesti malloc-funktsiooni ja see tähendab jälle, et iga kord, kui nad hunnikust mälu laenavad ja enam kunagi ei naase, on see halb programmeerimine, nii et peaksime enne tagasipöördumist kirjutama tasuta (mälu aadress, mis tuleks vabastada). Nii et alati on oluline kasutada malloci tasuta. Nii et malloci kasutades on meil mälu säilinud ja malloc eraldab mälu nii suureks, kui te seda küsite.

Head dünaamiliselt mälu jaotamist!

Kommertsmängumootorite avatud lähtekoodiga sadamad
Tasuta, avatud lähtekoodiga ja platvormidevaheliste mängumootorite puhkusereise saab kasutada nii vanade kui ka mõnede üsna hiljutiste mängude pealkir...
Parimad Linuxi käsurea mängud
Käsurida pole Linuxi kasutamisel lihtsalt teie suurim liitlane - see võib olla ka meelelahutusallikas, sest saate seda kasutada paljude lõbusate mängu...
Parimad Linuxi mängupuldi kaardistamise rakendused
Kui teile meeldib mängida Linuxis mänge tavalise klaviatuuri ja hiire sisestussüsteemi asemel mängupuldiga, on teie jaoks mõned kasulikud rakendused. ...