- Pomnilnik skladov je lokalni za vsako metodo in ko se metoda vrne, jo sklad samodejno izbriše.
- Področje globalnega pomnilnika dodeljuje pomnilnik vsem globalnim spremenljivkam. To pomnilniško območje se ustvari na začetku programa in na koncu samodejno počisti pomnilniško območje.
- Kupec pomnilnika je vedno sovražnik, ki izpolnjuje vse dinamične zahteve programa / aplikacije. Kadarkoli bomo uporabili funkcijo malloc, si bo sposodil nekaj pomnilnika iz kupa in nam dal kazalec nanjo.
Sintaksa:
Sintaksa malloc je (void *) malloc (size_t size). Sintaksa torej pravi, da malloc zahteva velikost, kazalec bo vrnil v bistvu prazen kazalec in velikost t je določena v
Zakaj void kazalec:
Malloc nima pojma, na kaj kaže; to preprosto pomeni, da ne ve, kateri podatki bodo shranjeni na tem mestu v pomnilniku. Preprosto dodeli pomnilnik, ki ga zahteva uporabnik, ne da bi vedel, kakšne podatke je treba shraniti v pomnilnik. Zato vrne kazalec praznine.
Malloc samo dodeli pomnilnik, nato pa je odgovornost uporabnika, da natipka na ustrezen tip, da ga lahko pravilno uporablja v programu. Void kazalec je kazalec, ki lahko kaže na katero koli vrsto podatkov, malloc vrne void kazalec, ker ne ve, katera vrsta podatkov bo shranjena v tem pomnilniku.
Tu prosimo malloc, da zdaj dodeli 6 bajtov pomnilnika, če bo malloc vrnil void kazalec. V tem primeru ga moramo vtipkati v kazalnik celoštevilskega tipa, ker želimo v to pomnilnik shraniti celo število. Tu malloc v kopici dodeli 6 bajtov pomnilnika, naslov prvega bajta pa je shranjen v kazalcu ptr.
Primer programa:
Tu je preprost primer programa, s katerim bomo na pravi način razumeli koncept malloc.
Tu lahko vidite s funkcijo printf, da uporabnika prosim, da vnese število celih števil. Deklarirali smo dve spremenljivki nad i in n. Spremenljivka n je kraj, kjer bomo shranili številko, ki jo vnese uporabnik. Po tem imamo funkcijo malloc; želimo, da malloc dodeli velikost, enakovredno velikosti n celih števil. Velikost množimo, če int z n; to nam bo dalo velikost n celih števil. Po tem bo malloc vrnil kazalec praznine, mi pa ga vtipkamo v celoštevilčni kazalec in naslov shranimo v kazalnik ptr. Tipkanje je pomembno, saj je dobra praksa.
Če kazalec vsebuje NULL, pomeni, da pomnilnik ni na voljo. Tako bomo preprosto izstopili iz programa s statusom okvare izhoda. Če temu ni tako, lahko enostavno zaženemo zanko for.
Zanka se bo izvajala od 0 do n-1 in uporabnika bomo vsakič prosili, naj vnese celo število. Znotraj funkcije scanf je ena stvar zapisana ptr + i, saj vemo, da ptr vsebuje naslov prvega bajta pomnilnika. Recimo, da je naslov tukaj 1000, i je na začetku enak nič, torej je 1000 + 0 1000, tako da bo znotraj tega naslova shranjeno naše prvo celo število, nato pa, ko i postane 1 tako 1000 + 1, kar je interno interpretirano kot (1000) +1 * 4, če predvidevam, da je velikost celotnega števila 4 bajta, in bi bila enaka 1004, zato bo naslednje celo število shranjeno na 1004 lokaciji. In to se bo nadaljevalo na ta način, naslovi so približno 1000, 1004, 1008 itd. Pred ptr + i ne uporabljamo znaka ampersand, ker nam ptr že daje naslov, ko pišemo ptr, ki je preprosto kazalec in vsebuje naslov, ne vrednosti, zato pred njim ni treba postaviti znaka & in ta koncept bi moral biti jasen.
Tu v tej zanki preprosto počnemo eno stvar, na katero tiskamo vsa cela števila na zaslon; očitno uporabljamo ptr + i, toda v tem primeru ga preimenujemo, ker ptr + i predstavlja naslov, zato ga moramo razporediti. Če je enak 0, bo 1000, ker predvidevamo, da bo prvi naslov 1000, zato ga preusmerjamo; dobili bomo prvo celo število, potem je i enako 1, in postalo bo 1001, vendar razlagano kot 1004, če je velikost celotnega števila 4. Ponovno. Preusmerili smo ga, zato nam bo dal 2nd celo število. Na ta način vse deluje.
To je v bistvu preprost program, ki od uporabnikov zahteva, da vnesejo n celo število, nato pa ta celo število preprosto prikažemo na zaslonu. Po izvedbi programa se bo prikazal.
Najprej prosimo uporabnika, da vnese število celih števil, nato pa uporabnik vnese cela števila in jih preprosto prikažemo na zaslonu.
Zaključek:
V zgornjem programu ni nič narobe, če ga nadaljujemo zelo dolgo, tukaj si sposojamo pomnilnik iz kupa, vendar nikoli ne vrnemo pomnilnika nazaj na kup, to se zgodi samo v primeru, ko ima program / aplikacija teči dolgo, približno 24 ur. Ponovno bodo poklicali funkcijo malloc in spet to pomeni, da vsakič, ko si sposodijo pomnilnik iz kupa in se nikoli ne vrnejo, je to slabo programiranje, zato bi morali pred vrnitvijo napisati brezplačno (naslov pomnilnika, ki naj se sprosti). Torej, kadar je uporaba malloc free pomembna. Torej z uporabo malloca imamo ohranjen pomnilnik in malloc dodeli tako velik pomnilnik, kot ga zahtevate.
Srečno dinamično dodeljevanje pomnilnika!