C Programovanie

AKO POUŽÍVAŤ FUNKCIU MALLOC V C

AKO POUŽÍVAŤ FUNKCIU MALLOC V C
Malloc je vstavaná funkcia deklarovaná v hlavičkovom súbore . Malloc je krátky názov pre „alokáciu pamäte“ a používa sa na dynamické pridelenie jedného veľkého bloku súvislej pamäte podľa zadanej veľkosti. Existujú dva typy pridelenia pamäte, statické a dynamické. Statické pridelenie pamäte sa vykonáva v čase kompilácie a za behu sa nemení. Dynamické prideľovanie pamäte na to prideľuje pamäť za behu; my používame malloc. Teraz ide o to, odkiaľ z tejto pamäte prichádza, takže všetky dynamické požiadavky v C sú splnené z haldy pamäte. Naša aplikácia / program bude mať v zásade 3 druhy pamäte

  • Zásobníková pamäť je pre každú metódu lokálna a keď sa metóda vráti, zásobník ju automaticky vymaže.
  • Oblasť globálnej pamäte vyhradzuje pamäť pre všetky globálne premenné. Táto oblasť pamäte sa vytvorí na začiatku programu a nakoniec ju automaticky vyčistí.
  • Halda pamäte je vždy nepriateľ spĺňajúci všetky dynamické požiadavky programu / aplikácie. Kedykoľvek použijeme funkciu malloc, bude si požičať nejakú pamäť z haldy a dá nám na ňu ukazovateľ.

Syntax:

Syntax malloc je (void *) malloc (size_t veľkosť). Syntax teda hovorí, že malloc vyžaduje veľkosť, vráti ukazovateľ v podstate neplatný ukazovateľ a veľkosť t je definovaná v ako celé číslo bez znamienka. Funkcia Malloc jednoducho alokuje blok pamäte podľa veľkosti určenej v halde, ako vidíte na syntaxi, ktorú veľkosť je potrebné zadať, a pri úspechu vráti ukazovateľ smerujúci na prvý bajt pridelenej pamäte, inak vráti hodnotu NULL. Úlohou malloc je teda prideliť pamäť za behu.

Prečo neplatný ukazovateľ:

Malloc nemá predstavu, na čo poukazuje; znamená to jednoducho, že nevie, aké údaje sa uložia na danom pamäťovom mieste. Iba alokuje pamäť požadovanú používateľom bez toho, aby poznal typ údajov, ktoré sa majú uložiť do pamäte. Preto vracia ukazovateľ neplatnosti.

Malloc iba alokuje pamäť, potom je zodpovednosťou používateľa, aby obsadil vhodný typ, aby ho bolo možné správne použiť v programe. Void pointer je ukazovateľ, ktorý môže ukazovať na akýkoľvek typ údajov, malloc vracia void pointer, pretože nevie, aký typ údajov bude uložený v tejto pamäti.

Tu žiadame program malloc, aby teraz pridelil 6 bajtov pamäte, ak bude malloc úspešný, vráti ukazovateľ neplatnosti. V takom prípade ho musíme napísať na ukazovateľ celočíselného typu, pretože do tejto pamäte chceme uložiť celé číslo. Malloc tu alokuje 6 bajtov pamäte na hromadu a adresa prvého bajtu je uložená v ukazovateli ptr.

Príklad programu:

Tu je jednoduchý príklad programu na správne pochopenie pojmu malloc.

Tu vidíte pomocou funkcie printf, aby som používateľa požiadal o zadanie počtu celých čísel. Deklarovali sme dve premenné nad i a n. Premenná n je miesto, kam uložíme číslo zadané používateľom. Potom máme funkciu malloc; chceme, aby malloc pridelil veľkosť zodpovedajúcu veľkosti n celých čísel. Násobíme veľkosť, ak int s n; toto nám dá veľkosť celých čísel n. Potom malloc vráti prázdny ukazovateľ a my ho typicky obsadzujeme na celočíselný ukazovateľ a adresu ukladáme do ukazovateľa ptr. Typický obsadenie je dôležité, pretože je to osvedčený postup.

Teraz, ak ukazovateľ obsahuje NULL, znamená to, že pamäť nie je k dispozícii. Takže jednoducho opustíme program so stavom zlyhania ukončenia. Ak to tak nie je, môžeme ľahko spustiť cyklus for.

Smyčka bude prebiehať od 0 do n-1 a od používateľa budeme vždy vyžadovať zadanie celého čísla. Vo funkcii scanf je jedna vec napísaná ptr + i, pretože vieme, že ptr obsahuje adresu prvého bajtu pamäte. Povedzme, že adresa je tu 1000, spočiatku sa rovná nule, takže 1000 + 0 je 1000, takže v rámci tejto adresy bude uložené naše prvé celé číslo a potom, keď bude i, bude 1, takže 1000 + 1 bude interne interpretované ako (1000) +1 * 4, ak predpokladám, že veľkosť celého čísla je 4 bajty, a to by sa rovnalo 1004, takže ďalšie celé číslo bude uložené v rámci umiestnenia 1004. A toto bude pokračovať týmto spôsobom, adresy sú ako 1000, 1004, 1008 atď. Nepoužívame ampersand pred ptr + i, pretože ptr nám už dáva adresu, keď píšeme ptr, čo je jednoducho ukazovateľ a obsahuje adresu, nie hodnotu, takže nie je potrebné dávať pred ňu ampersand a tento koncept by mal byť jasný.

Tu v tejto slučke jednoducho robíme jednu vec, ktorou tlačíme všetky celé čísla na obrazovku; Je zrejmé, že používame ptr + i, ale v tomto prípade to dereferencujeme, pretože ptr + i predstavuje adresu, takže ju musíme dereferencovať. Ak sa budem rovnať 0, bude to 1 000, pretože predpokladáme, že prvá adresa bude 1 000, takže ju dereferujeme; dostaneme prvé celé číslo potom i rovné 1 a stane sa 1001, ale interpretuje sa ako 1004, ak je veľkosť celého čísla 4. Opäť. Dereferencujeme to, takže nám dá číslo 2nd celé číslo. Takto funguje všetko.

Takže toto je v podstate jednoduchý program, ktorý žiada používateľov, aby zadali celé číslo n, a potom tieto celé čísla jednoducho zobrazíme na obrazovke. Po vykonaní programu sa to zobrazí.

Najskôr požiadame používateľa, aby zadal počet celých čísel, a potom používateľ zadá celé čísla, ktoré jednoducho zobrazíme na obrazovke.

Záver:

Vo vyššie uvedenom programe sa nestalo nič zlé, pokiaľ v ňom pokračujeme veľmi dlho, požičiavame si pamäť z haldy, ale nikdy nevraciame pamäť späť do haldy, stane sa to iba v takom prípade, keď program / aplikácia má bežať dlho, napríklad 24 hodín. Budú znova volať funkciu malloc a to znova znamená, že zakaždým, keď si požičiavajú pamäť z haldy a už sa nikdy nevrátia, je to zlé programovanie, takže by sme mali pred návratom napísať voľnú (adresa pamäte, ktorá by sa mala uvoľniť). Takže kedykoľvek je použitie malloc free dôležité. Použitím malloc sme teda šetrili pamäť a malloc alokuje pamäť tak veľkú, ako si sami pýtate.

Šťastné dynamické prideľovanie pamäte!

Tlačidlo ľavého kliknutia myši nefunguje v systéme Windows 10
Ak používate samostatnú myš s prenosným počítačom alebo stolovým počítačom, ale nefunguje ľavé tlačidlo myši vo Windows 10/8/7 z nejakého dôvodu uvádz...
Kurzor pri písaní v systéme Windows 10 skáče alebo sa pohybuje náhodne
Ak zistíte, že kurzor myši skáče alebo sa pohybuje sám, automaticky a náhodne pri písaní na notebooku alebo počítači so systémom Windows, niektoré z t...
Ako zmeniť smer posúvania myši a touchpadu v systéme Windows 10
Myš a TouchpadNielenže uľahčujú výpočty, ale sú aj efektívnejšie a menej časovo náročné. Nemôžeme si predstaviť život bez týchto zariadení, ale je pra...