C Programiranje

KAKO KORISTITI FUNKCIJU MALLOC U C

KAKO KORISTITI FUNKCIJU MALLOC U C
Malloc je ugrađena funkcija deklarirana u zaglavnoj datoteci . Malloc je kratki naziv za 'dodjelu memorije' i koristi se za dinamičko dodjeljivanje jednog velikog bloka susjedne memorije prema navedenoj veličini. Postoje dvije vrste dodjele memorije statička i dinamička. Dodela statičke memorije vrši se u vrijeme kompilacije i ne mijenja se za vrijeme izvođenja. Dinamička dodjela memorije za to dodjeljuje memoriju u vrijeme izvođenja; koristimo malloc. Sada je stvar u tome odakle dolazi ova memorija, tako da su svi dinamički zahtjevi u C ispunjeni iz gomile memorije. U osnovi, naša aplikacija / program imat će 3 vrste memorije

  • Memorija stoga je lokalna za svaku metodu, a kad se metoda vrati, stog je automatski briše.
  • Područje globalne memorije dodjeljuje memoriju za sve globalne varijable. Ovo memorijsko područje stvara se na početku programa i na kraju automatski briše memorijsko područje.
  • Hrpa memorije uvijek je neprijatelj koji ispunjava sve dinamičke zahtjeve programa / aplikacije. Kad god ćemo koristiti funkciju malloc, posudit će nešto memorije iz hrpe i dati nam pokazivač na nju.

Sintaksa:

Sintaksa malloc je (void *) malloc (size_t size). Sintaksa kaže da malloc zahtijeva veličinu, vratit će pokazivač u osnovi void pokazivač i veličina t je definirana u kao nepotpisani cijeli broj. Funkcija Malloc jednostavno dodjeljuje memorijski blok prema veličini navedenoj u hrpi, kao što vidite u sintaksi da treba navesti veličinu, a nakon uspjeha vraća pokazivač koji pokazuje na prvi bajt dodijeljene memorije, a inače vraća NULL. Dakle, posao malloca je dodijeliti memoriju u vremenu izvođenja.

Zašto poništiti pokazivač:

Malloc nema ideju na što ukazuje; to jednostavno znači da ne zna koji će podaci biti pohranjeni na tom memorijskom mjestu. Ona samo dodjeljuje memoriju koju je korisnik zatražio, ne znajući vrstu podataka koji se pohranjuju u memoriju. Zato vraća prazninu pokazivača.

Malloc samo dodjeljuje memoriju nakon toga je korisnička odgovornost da tipkuje odgovarajuću vrstu kako bi se mogla pravilno koristiti u programu. Pokazivač Void je pokazivač koji može usmjeriti bilo koju vrstu podataka. Malloc vraća void pokazivač jer ne zna koja će vrsta podataka biti pohranjena u toj memoriji.

Ovdje tražimo da malloc dodijeli 6 bajta memorije ako će uspješno malloc vratiti void pokazivač. U tom slučaju moramo ga otkucati na pokazivač cijelog broja jer želimo pohraniti cijeli broj u tu memoriju. Ovdje malloc dodjeljuje 6 bajtova memorije u hrpu, a adresa prvog bajta pohranjena je u pokazivač ptr.

Primjer programa:

Evo jednostavnog primjera programa kako bismo na pravi način razumjeli koncept malloca.

Ovdje možete vidjeti s funkcijom printf molim korisnika da unese broj cijelih brojeva. Proglasili smo dvije varijable iznad i i n. Varijabla n je mjesto na kojem ćemo pohraniti broj koji je korisnik unio. Nakon toga imamo malloc funkciju; želimo da malloc dodijeli veličinu ekvivalentnu veličini od n cijelih brojeva. Množimo veličinu ako je int s n; to će nam dati veličinu od n cijelih brojeva. Nakon toga, malloc će vratiti void pokazivač, a mi ga upisujemo u cjelobrojni pokazivač i pohranjujemo adresu u ptr pokazivač. Prenos teksta je važan jer je to dobra praksa.

Ako pokazivač sadrži NULL, to znači da memorija nije dostupna. Tako ćemo jednostavno izaći iz programa sa statusom neuspješnog izlaska. Ako to nije slučaj, lako možemo pokrenuti for petlju.

Petlja će se izvoditi od 0 do n-1, a mi ćemo tražiti od korisnika da svaki put unese cijeli broj jedan po jedan. Unutar funkcije scanf postoji jedna stvar napisana ptr + i jer znamo da ptr sadrži adresu prvog bajta memorije. Recimo da je ovdje adresa 1000 i, u početku je jednak nuli, tako da je 1000 + 0 1000, pa će unutar te adrese biti pohranjen naš prvi cijeli broj, a nakon toga kada i postane 1 pa 1000 + 1 što je interno protumačeno kao (1000) +1 * 4 ako pretpostavim da je veličina cijelog broja 4 bajta, a to bi bilo jednako 1004, pa će sljedeći cijeli broj biti pohranjen na mjestu 1004. I to će se nastaviti na ovaj način adrese su poput 1000, 1004, 1008 i tako dalje. Ne koristimo ampersand prije ptr + i, jer nam ptr već daje adresu kada pišemo ptr, što je jednostavno pokazivač i sadrži adresu, a ne vrijednost, pa nema potrebe za stavljanjem ampersanda ispred, i ovaj bi koncept trebao biti jasan.

Ovdje u ovoj petlji, jednostavno radimo jednu stvar, ispisujemo sve cijele brojeve na zaslon; očito koristimo ptr + i, ali ovdje, u ovom slučaju, preusmjeravamo ga jer ptr + i predstavlja adresu, pa ga moramo dereferencirati. Ako je jednako 0, bit će 1000, jer pretpostavljamo da će prva adresa biti 1000, pa je preusmjeravamo; dobit ćemo prvi cijeli broj tada i jednak 1, i postat će 1001, ali protumačen kao 1004 ako je veličina cijelog broja 4. Opet. Preusmjeravamo ga, pa će nam dati 2nd cijeli broj. Na taj način sve funkcionira.

Dakle, ovo je u osnovi jednostavan program koji traži od korisnika da unesu n cijelih brojeva, a zatim te cijele brojeve jednostavno prikazujemo na zaslonu. Nakon izvršavanja programa, ovo će se prikazati.

Prvo tražimo od korisnika da unese broj cijelih brojeva, a zatim korisnik unosi cijele brojeve i mi ih jednostavno prikazujemo na zaslonu.

Zaključak:

U gore navedenom programu nema ništa loše sve dok ga nastavljamo vrlo dugo, ovdje posuđujemo memoriju iz hrpe, ali nikada ne vraćamo memoriju na hrpu, to se događa samo u onom slučaju kada program / aplikacija ima trčati dulje vrijeme poput 24 sata. Ponovno će pozivati ​​funkciju malloc, a to opet znači da svaki put kad posude memoriju iz hrpe i nikad se ne vrate, ovo je loše programiranje, pa bismo trebali vratiti besplatno (adresu memorije koju treba osloboditi) prije povratka. Dakle, kad god je korištenje besplatnog malloca važno. Dakle, koristeći malloc, sačuvali smo memoriju, a malloc dodijeljuje memoriju toliko veliku koliko tražite.

Sretna dinamička dodjela memorije!

Vulkan za korisnike Linuxa
Sa svakom novom generacijom grafičkih kartica vidimo da programeri igara pomiču granice grafičke vjernosti i dolaze na korak od fotorealizma. No, bez ...
OpenTTD vs Simutrans
Stvaranje vlastite simulacije prijevoza može biti zabavno, opuštajuće i izuzetno primamljivo. Zbog toga morate isprobati što više igara kako biste pro...
Vodič za OpenTTD
OpenTTD je jedna od najpopularnijih igara za poslovnu simulaciju. U ovoj igri morate stvoriti prekrasan prijevoznički posao. Međutim, počet ćete u poč...