KAIP NAUDOTI MALLOC FUNKCIJĄ C

How Use Malloc Function C



„Malloc“ yra integruota funkcija, paskelbta antraštės faile. „Malloc“ yra trumpas „atminties paskirstymo“ pavadinimas ir naudojamas dinamiškai paskirstyti vieną didelį gretimos atminties bloką pagal nurodytą dydį. Yra dviejų tipų statinis ir dinaminis atminties paskirstymas. Statinis atminties paskirstymas atliekamas kompiliavimo metu ir vykdymo metu jis nesikeičia. Dinaminis atminties paskirstymas yra atminties paskirstymas vykdymo metu; mes naudojame malloc. Dabar esmė yra ta, iš kur ateina ši atmintis, taigi visi dinaminiai C reikalavimai yra įvykdyti iš kaupos atminties. Iš esmės mūsų programa/programa turės 3 rūšių atmintį

  • Kamino atmintis yra vietinė kiekvienam metodui, o kai metodas grįžta, krūva ją automatiškai išvalo.
  • Visuotinės atminties sritis paskirsto atmintį visiems globaliems kintamiesiems. Ši atminties sritis yra sukurta programos pradžioje, o galų gale ji automatiškai išvalo atminties sritį.
  • Krūvos atmintis visada yra priešas, atitinkantis visus dinaminius programos/programos reikalavimus. Kai naudosime „malloc“ funkciją, ji pasiskolins atminties iš krūvos ir parodys mums ją.

Sintaksė:







„Malloc“ sintaksė yra (void*) malloc (size_t size). Taigi sintaksėje sakoma, kad malloc reikia dydžio, jis grąžins žymeklį iš esmės tuščią žymeklį, o dydis t yra apibrėžtas kaip nepasirašytas sveikasis skaičius. Funkcija „Malloc“ tiesiog priskiria atminties bloką pagal krūvoje nurodytą dydį, kaip matote sintaksėje, kad reikia nurodyti dydį, o sėkmės atveju grąžina žymeklį, nukreiptą į pirmąjį skirtos atminties baitą, kitaip pateikia NULL . Taigi „malloc“ užduotis yra paskirstyti atmintį vykdymo metu.



Kodėl tuščias žymeklis:

„Malloc“ neturi idėjos, į ką jis nurodo; tai tiesiog reiškia, kad jis 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ą žymeklį.



„Malloc“ tik paskirsto atmintį, o tada vartotojas yra atsakingas už atitinkamo tipo rašymą, kad jis galėtų būti tinkamai naudojamas programoje. Tuštumos žymeklis yra rodyklė, galinti nukreipti bet kokio tipo duomenis, o malloc grąžina tuštumos žymeklį, nes nežino, kokio tipo duomenys bus saugomi toje atmintyje.





Čia mes prašome „malloc“ skirti 6 baitus atminties, jei tai pavyks, „malloc“ grąžins tuščią žymeklį. Tokiu atveju turime jį įvesti į sveiko skaičiaus tipo žymeklį, nes norime toje atmintyje išsaugoti sveikąjį skaičių. Čia „malloc“ krūvoje skiria 6 baitus atminties, o pirmojo baito adresas saugomas rodyklėje ptr.



Programos pavyzdys:

Čia yra paprastas programos pavyzdys, siekiant tinkamai suprasti „malloc“ sąvoką.

Čia galite pamatyti su funkcija printf, prašau vartotojo įvesti sveikųjų skaičių skaičių. Mes paskelbėme du kintamuosius virš i ir n. Kintamasis n yra vieta, kurioje išsaugosime vartotojo įvestą numerį. Po to mes turime malloc funkciją; norime, kad „malloc“ skirtų dydžio dydį, lygų n sveikųjų skaičių dydžiui. Mes dauginame dydį, jei int su n; tai duosime n sveikųjų skaičių dydį. Po to „malloc“ grąžins tuščią žymeklį, o mes jį įvesime į sveiko skaičiaus rodyklę ir išsaugosime adresą ptr rodyklėje. Rašymas tipu 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, galime lengvai paleisti ciklą.

Ciklas veiks nuo 0 iki n-1, ir mes paprašysime vartotojo kiekvieną kartą įvesti sveikąjį skaičių po vieną. „Scanf“ funkcijoje yra vienas dalykas, parašytas ptr+i, nes žinome, kad ptr yra pirmojo atminties baito adresas. Tarkime, kad adresas yra 1000 čia i iš pradžių yra lygus nuliui, taigi 1000+0 yra 1000, taigi šiame adrese bus išsaugotas pirmasis sveikasis skaičius, o po to, kai i taps 1, taigi 1000+1, kuris viduje interpretuojamas kaip (1000) +1 *4, jei darau prielaidą, kad sveikasis skaičius yra 4 baitai ir jis būtų lygus 1004, todėl kitas sveikasis skaičius bus saugomas 1004 vietoje. Ir tai tęsis tokiu būdu, adresai yra tokie kaip 1000, 1004, 1008 ir pan. Mes nenaudojame „ampersand“ prieš „ptr+i“, nes „ptr“ jau suteikia mums adresą, kai rašome ptr, o tai tiesiog rodyklė, ir jame yra adresas, o ne vertė, todėl nereikia rašyti „ampersand“ prieš jį ir ši sąvoka turėtų būti aiški.

Šioje eilutėje mes tiesiog darome vieną dalyką - spausdiname visus sveikus skaičius ekrane; Akivaizdu, kad mes naudojame ptr+i, bet šiuo atveju mes jį išjungiame, nes ptr+i reiškia adresą, todėl turime jį nukrypti. Jei i lygus 0, tai bus 1000, nes mes darome prielaidą, kad pirmasis adresas bus 1000, todėl mes jį nukrypstame; mes gausime pirmąjį sveikąjį skaičių, tada i lygus 1, ir jis taps 1001, bet aiškinamas kaip 1004, jei sveikasis skaičius yra 4. Vėlgi. Mes jį išvardijame, todėl gausime 2antrasveikasis 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 tiesiog rodome tuos sveikus skaičius ekrane. Įvykdžius programą, tai bus rodoma.

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

Išvada:

Aukščiau pateiktoje programoje nėra nieko blogo, kol mes ją tęsiame labai ilgai, mes skolinamės atminties iš krūvos, bet niekada negrąžiname atminties į krūvą, tai atsitinka tik tuo atveju, kai programa/programa turi bėgti ilgą laiką, pavyzdžiui, 24 val. Jie vėl iškvies „malloc“ funkciją, ir tai reiškia, kad kiekvieną kartą, kai jie skolinasi atmintį iš krūvos ir niekada negrįžta, tai yra blogas programavimas, todėl prieš grįždami turėtume parašyti laisvą (atminties adresą, kuris turėtų būti atleistas). Taigi visada svarbu naudoti „malloc free“. Taigi, naudodamiesi „malloc“, išsaugojome atmintį, o „malloc“ skiria tokią didelę atmintį, kokios prašote.

Laimingo dinamiško atminties paskirstymo!