C Programování

JAK POUŽÍVAT FUNKCI MALLOC V C

JAK POUŽÍVAT FUNKCI MALLOC V C
Malloc je integrovaná funkce deklarovaná v souboru záhlaví . Malloc je zkrácený název pro „alokaci paměti“ a používá se k dynamickému přidělení jednoho velkého bloku souvislé paměti podle zadané velikosti. Existují dva typy přidělení paměti statické a dynamické. Statické přidělení paměti se provádí v době kompilace a za běhu se nezmění. Dynamická alokace paměti k tomu přiděluje paměť za běhu; používáme malloc. Nyní jde o to, kde z této paměti přichází, takže všechny dynamické požadavky v C jsou splněny z haldy paměti. Naše aplikace / program bude mít v zásadě 3 druhy paměti

  • Paměť zásobníku je pro každou metodu lokální, a když se metoda vrátí, zásobník ji automaticky vymaže.
  • Oblast globální paměti přiděluje paměť pro všechny globální proměnné. Tato oblast paměti se vytvoří na začátku programu a nakonec ji automaticky vymaže.
  • Halda paměti je vždy nepřítel splňující všechny dynamické požadavky programu / aplikace. Kdykoli použijeme funkci malloc, půjde si nějaká paměť z hromady a dá nám na ni ukazatel.

Syntax:

Syntaxe malloc je (void *) malloc (size_t size). Syntaxe tedy říká, že malloc vyžaduje velikost, vrátí ukazatel v podstatě ukazatel void a velikost t je definována v jako celé číslo bez znaménka. Funkce Malloc jednoduše přiděluje blok paměti podle velikosti určené v haldě, jak vidíte na syntaxi, kterou je třeba zadat, a při úspěchu vrátí ukazatel ukazující na první bajt přidělené paměti, jinak vrátí NULL. Úkolem malloc je tedy přidělit paměť za běhu.

Proč neplatný ukazatel:

Malloc nemá představu, na co ukazuje; jednoduše to znamená, že neví, jaká data se uloží na tomto paměťovém místě. Pouze přiděluje paměť požadovanou uživatelem, aniž by znal typ dat, která mají být uložena uvnitř paměti. Proto vrací ukazatel neplatnosti.

Malloc přiděluje paměť poté, co je odpovědností uživatele obsadit vhodný typ, aby mohl být správně použit v programu. Void pointer je ukazatel, který může ukazovat jakýkoli typ dat, malloc vrací void pointer, protože neví, jaký typ dat bude uložen uvnitř této paměti.

Zde žádáme malloc, aby nyní přidělil 6 bajtů paměti, pokud to úspěch malloc vrátí ukazatel void. V takovém případě jej musíme vyslat na ukazatel na celé číslo, protože v této paměti chceme uložit celé číslo. Zde malloc přiděluje 6 bajtů paměti v haldě a adresa prvního bajtu je uložena v ukazateli ptr.

Příklad programu:

Zde je jednoduchý ukázkový program, který má správně porozumět pojmu malloc.

Zde můžete vidět pomocí funkce printf žádám uživatele, aby zadal počet celých čísel. Deklarovali jsme dvě proměnné nad i a n. Proměnná n je místo, kam uložíme číslo zadané uživatelem. Poté máme funkci malloc; chceme, aby malloc přidělil velikost odpovídající velikosti n celých čísel. Násobíme velikost, pokud int s n; to nám dá velikost celých čísel n. Poté malloc vrátí ukazatel void a my jej vysíláme na celočíselný ukazatel a ukládáme adresu do ukazatele ptr. Typecasting je důležitý, protože je dobrým postupem.

Nyní, pokud ukazatel obsahuje NULL, znamená to, že paměť není k dispozici. Jednoduše tedy opustíme program se stavem selhání ukončení. Pokud tomu tak není, můžeme snadno spustit smyčku for.

Smyčka bude probíhat od 0 do n-1 a my budeme uživatele pokaždé požádat o zadání celého čísla. Ve funkci scanf je jedna věc napsaná ptr + i, protože víme, že ptr obsahuje adresu prvního bajtu paměti. Řekněme, že adresa je zde 1000, i je zpočátku rovna nule, takže 1000 + 0 je 1000, takže v rámci této adresy bude uloženo naše první celé číslo a poté, když se i stane 1, tak 1000 + 1, které má interně interpretováno jako (1000) +1 * 4, pokud předpokládám, že velikost celého čísla je 4 bajty, a to by se rovnalo 1004, takže další celé číslo bude uloženo v umístění 1004. A toto bude pokračovat tímto způsobem, adresy jsou jako 1000, 1004, 1008 atd. Nepoužíváme ampersand před ptr + i, protože ptr nám již dává adresu, když píšeme ptr, což je jednoduše ukazatel, a obsahuje adresu, nikoli hodnotu, takže není třeba před něj dávat ampersand a tento koncept by měl být jasný.

Tady v této smyčce prostě děláme jednu věc, kterou tiskneme všechna celá čísla na obrazovce; samozřejmě používáme ptr + i, ale zde v tomto případě dereferencujeme, protože ptr + i představuje adresu, takže ji musíme dereferencovat. Pokud se rovná 0, bude to 1000, protože předpokládáme, že první adresa bude 1000, takže ji dereferencujeme; dostaneme první celé číslo, pak i rovné 1, a stane se 1001, ale bude interpretováno jako 1004, pokud je velikost celého čísla 4. Znovu. Dereferencujeme to, takže nám dá 2nd celé číslo. Tímto způsobem vše funguje.

Jedná se tedy v podstatě o jednoduchý program, který žádá uživatele, aby zadali celé číslo n, a potom jednoduše zobrazujeme tato celá čísla na obrazovce. Po provedení programu se to zobrazí.

Nejprve žádáme uživatele, aby zadal počet celých čísel, a poté uživatel zadává celá čísla, a jednoduše je zobrazujeme na obrazovce.

Závěr:

Ve výše uvedeném programu není nic špatného, ​​pokud v něm pokračujeme velmi dlouho, půjčujeme si paměť z haldy, ale nikdy nevracíme paměť zpět do haldy, stane se to pouze v tom případě, když program / aplikace mají běžet po dlouhou dobu, například 24 hodin. Budou znovu volat funkci malloc a to znovu znamená, že pokaždé, když si vypůjčují paměť z haldy a nikdy se nevracejí, je to špatné programování, takže bychom měli před návratem psát zdarma (adresa paměti, která by měla být uvolněna). Takže kdykoli je použití malloc free důležité. Takže pomocí malloc jsme zachovali paměť a malloc přiděluje paměť tak velkou, jak se ptáte.

Šťastné dynamické přidělování paměti!

Hry HD remasterované hry pro Linux, které nikdy dříve neměly vydání Linuxu
HD remasterované hry pro Linux, které nikdy dříve neměly vydání Linuxu
Mnoho vývojářů a vydavatelů her přichází s HD remasterem starých her, aby prodloužili životnost franšízy, prosím fanoušky, kteří požadují kompatibilit...
Hry Jak používat AutoKey k automatizaci linuxových her
Jak používat AutoKey k automatizaci linuxových her
AutoKey je nástroj pro automatizaci stolních počítačů pro systémy Linux a X11, programovaný v programech Python 3, GTK a Qt. Pomocí jeho funkcí skript...
Hry Jak zobrazit počítadlo FPS v linuxových hrách
Jak zobrazit počítadlo FPS v linuxových hrách
Hraní na Linuxu získalo velký tlak, když společnost Valve v roce 2012 oznámila podporu systému Linux pro klienta Steam a jejich hry. Od té doby se mno...