C programavimas

KAIP NAUDOTI MALLOC FUNKCIJĄ C

KAIP NAUDOTI MALLOC FUNKCIJĄ C
„Malloc“ yra įmontuota funkcija, deklaruota antraštės faile . Malloc yra trumpasis „atminties paskirstymo“ pavadinimas ir naudojamas dinamiškai paskirstyti vieną didelį gretimos atminties bloką pagal nurodytą dydį. Yra dviejų tipų atminties paskirstymas: statinis ir dinaminis. Statinė atmintis paskirstoma kompiliavimo metu, o vykdymo metu ji nesikeičia. Dinaminis atminties paskirstymas tam skiria atmintį vykdymo metu; mes naudojame malloc. Dabar yra taškas, iš kurio ateina ši atmintis, taigi visi dinaminiai reikalavimai C yra įvykdyti iš kaupo atminties. Iš esmės mūsų programa / programa turės 3 rūšių atmintį

  • Kiekvieno metodo kaupimo atmintis yra vietinė, o kai metodas grįžta, krūva automatiškai ją išvalo.
  • Visuotinė atminties sritis priskiria atmintį visiems pasauliniams kintamiesiems. Ši atminties sritis sukuriama programos pradžioje, o galiausiai ji automatiškai išvalo atminties sritį.
  • Krūvos atmintis visada priešina visus dinaminius programos / programos reikalavimus. Kai mes ketiname naudoti malloc funkciją, ji pasiskolins šiek tiek atminties iš krūvos ir suteiks mums jos rodyklę.

Sintaksė:

Malloco sintaksė yra (void *) malloc (size_t size). Taigi sintaksėje sakoma, kad malloc reikalauja dydžio, jis grąžins žymeklį iš esmės tuščiu žymekliu, o dydis t yra apibrėžtas kaip nepasirašytas sveikasis skaičius. „Malloc“ funkcija paprasčiausiai paskirsto atminties bloką pagal kaupe nurodytą dydį, kaip sintaksėje matote, kad reikia nurodyti dydį, ir, pasisekus, jis grąžina žymeklį, nukreiptą į pirmąjį paskirtos atminties baitą, o kitas grąžina NULL. Taigi, „Malloc“ darbas yra paskirstyti atmintį vykdymo metu.

Kodėl negalioja rodyklė:

Malloc neturi idėjos, į ką jis rodo; tai tiesiog reiškia, kad nežino, kokie duomenys bus saugomi toje atminties vietoje. Jis tik paskirsto vartotojo prašomą atmintį, nežinodamas atmintyje saugomų duomenų tipo. Štai kodėl jis grąžina tuščią rodyklę.

„Malloc“ tik paskiria atmintį, tada vartotojas yra atsakingas už tipografiją, kad ji būtų tinkamai naudojama programoje. Tuščias rodyklė yra rodyklė, kuri gali nukreipti bet kokio tipo duomenis. „Malloc“ grąžina negaliojančią rodyklę, nes ji nežino, kokio tipo duomenys bus saugomi toje atmintyje.

Čia mes prašome malloco dabar skirti 6 baitus atminties, jei jo sėkmė atiteks tuščią rodyklę. Tokiu atveju turime jį surašyti į sveiko skaičiaus tipo rodyklę, nes norime išsaugoti sveikąjį skaičių toje atmintyje. Čia mallocas kaupia 6 baitus atminties, o pirmojo baito adresas saugomas rodyklėje ptr.

Programos pavyzdys:

Čia pateikiamas paprastas programos pavyzdys, norint tinkamai suprasti malloko sąvoką.

Čia galite pamatyti funkciją printf. Aš prašau vartotojo įvesti sveikųjų skaičių skaičių. Deklaravome du kintamuosius virš i ir n. Kintamasis n yra vieta, kur saugosime vartotojo įvestą numerį. Po to mes turime malloc funkciją; norime, kad mallokas paskirstytų dydį, kuris atitiktų n sveikųjų skaičių dydį. Mes dauginame dydį, jei int su n; taip gausime n sveikųjų skaičių dydį. Po to, Malloc grąžins tuščią žymeklį, mes jį tipuojame į sveiko skaičiaus rodyklę ir adresą saugome ptr rodyklėje. Rašymas rašant spausdinimą yra svarbus, nes tai yra gera praktika.

Jei rodyklėje yra NULL, tai reiškia, kad atminties nėra. Taigi mes tiesiog išeisime iš programos su išėjimo gedimo būsena. Jei taip nėra, mes galime lengvai paleisti „for a loop“.

Kilpa tęsis nuo 0 iki n-1, ir mes paprašysime vartotojo kiekvieną kartą įvesti sveikąjį skaičių po vieną. Funkcijoje scanf yra vienas dalykas, parašytas ptr + i, nes žinome, kad ptr yra pirmojo atminties baito adresas. Tarkime, kad adresas yra 1000, čia i yra lygus nuliui iš pradžių, taigi 1000 + 0 yra 1000, taigi tame adrese mūsų pirmasis sveikasis skaičius bus saugomas, tada po to, kai aš tapsiu 1, taigi 1000 + 1, kuris viduje aiškinamas kaip (1000) +1 * 4, jei darau prielaidą, kad sveikojo skaičiaus dydis yra 4 baitai, ir jis bus lygus 1004, taigi kitas sveikasis skaičius bus saugomas 1004 vietose. Ir tai tęsis tokiu būdu, adresai yra tokie kaip 1000, 1004, 1008 ir pan. Prieš „ptr + i“ nenaudojame „ampersand“, nes „ptr“ jau nurodo adresą, kai rašome ptr, kuris yra tiesiog rodyklė, o jame yra adresas, o ne vertė, todėl nėra reikalavimo prieš jį įvesti „ampersand“ ir ši sąvoka turėtų būti aiški.

Šioje kilpoje mes tiesiog darome vieną dalyką, ekrane atspausdiname visus skaičius; akivaizdu, kad mes naudojame ptr + i, bet šiuo atveju mes darome iš jo nukrypimą, nes ptr + i reiškia adresą, todėl mes turime nuo jo nukrypti. Jei aš lygus 0, tai bus 1000, nes mes darome prielaidą, kad pirmasis adresas bus 1000, todėl mes darome iš jo išvadą; gausime pirmąjį sveiką skaičių, tada i, lygų 1, ir jis taps 1001, bet interpretuojamas kaip 1004, jei sveikojo skaičiaus dydis yra 4. Vėlgi. Mes tai darome, todėl tai duos mums 2nd sveikasis skaičius. Tokiu būdu viskas veikia.

Taigi, tai iš esmės yra paprasta programa, kuri prašo vartotojų įvesti n sveikąjį skaičių, o tada mes paprasčiausiai rodome tuos sveikus skaičius ekrane. Vykdžius programą, tai bus rodoma.

Pirma, mes prašome vartotojo įvesti sveikų skaičių skaičių, o tada vartotojas įveda sveikus skaičius, ir mes tiesiog juos rodome ekrane.

Išvada:

Aukščiau pateiktoje programoje nėra nieko blogo, kol mes ją tęsiame labai ilgai, čia mes skolinamės atminties iš kaupo, bet mes niekada negrąžiname atminties į kaupą. Tai atsitinka tik tuo atveju, kai programa / programa turi bėgti ilgą laiką, pavyzdžiui, 24 val. Jie vėl skambins malloc funkcijai, ir tai reiškia, kad kiekvieną kartą, kai jie pasiskolina atminties iš krūvos ir niekada negrįžta, tai yra blogas programavimas, todėl prieš grįždami turėtume parašyti nemokamai (atminties adresas, kurį reikėtų atleisti). Taigi, kai svarbu naudoti „Malloc free“. Taigi, naudodami malloc, mes išsaugojome atmintį, o malloc skiria tiek didelę atmintį, kiek jos paprašote.

Laimingas dinamiškas atminties paskirstymas!

Geriausi „Linux“ komandinės eilutės žaidimai
Komandų eilutė yra ne tik jūsų didžiausias sąjungininkas naudojant „Linux“, bet ir pramogų šaltinis, nes ją galite naudoti norėdami žaisti daug įdomių...
Geriausios „Linux“ skirtos „Gamepad“ žemėlapių sudarymo programos
Jei jums patinka žaisti žaidimus „Linux“ su žaidimų pultu, o ne įprasta klaviatūra ir pelės įvesties sistema, yra keletas jums naudingų programų. Daug...
Naudingi įrankiai „Linux“ žaidėjams
Jei jums patinka žaisti žaidimus „Linux“ sistemoje, yra tikimybė, kad galbūt naudojote tokias programas ir įrankius kaip „Wine“, „Lutris“ ir „OBS Stud...