Jak funguje dynamická alokace paměti?

Sdílet
Vložit
  • čas přidán 14. 06. 2024
  • Když vaše aplikace potřebuje ukládat data do paměti počítače, musí o ni nejprve požádat a operační systém paměť zarezervuje. Tomuto procesu se říká ALOKACE.
    Alokace paměti se dělí na STATICKOU, pro kterou je nutné předem znát velikost požadované paměti a DYNAMICKOU, kde velikost požadované paměti lze určit až za běhu programu.
    Jak se do operační paměti spuštěné aplikace ukládají, jak funguje dynamická alokace paměti a jak ji můžete ve vašich programech použít? To všechno si řekneme v tomto videu!
    Můj Discord: github.com/Grizlikk/GrizlikYT...
    0:00 Úvod
    0:50 Příprava projektu v C
    1:20 Co je to alokace paměti?
    2:01 Statická a dynamická alokace paměti
    2:45 Nedostatky staticky alokované paměti
    4:57 Dynamická alokace paměti
    6:06 Použití dynamické alokace paměti
    7:46 Segmentace procesu
    8:48 Umístění dynamicky alokované paměti
    9:25 Dynamicky alokovaná paměť jako pole
    10:35 Použití dynamicky alokované paměti jako pole
    11:45 Bezpečnost paměti
    12:15 Další možnosti dynamické alokace paměti
    13:24 Rozdíl mezi malloc() a calloc()
    14:00 Příklad použití dynamické alokace paměti
    15:28 Závěr

Komentáře • 18

  • @int32_
    @int32_ Před 2 měsíci

    8:52 neměl by heap ležet spíš pod stackem nad data segmentem, uprostřed volné paměti?
    9:05 heap je pomalejší jenom při alokaci, přístup je skoro stejně rychlý

    • @GrizlikD
      @GrizlikD  Před 2 měsíci

      To jsem taky řešil a dokonce jsme to probírali i na Discordu...
      Někde to tak být může, někde to tak být nemusí, to už záleží na konkrétní implementaci tím OS, ale z pohledu návodu mi přijde naopak podstatně smysluplnější říct, že heap je úplně mimo segmenty
      Protože z toho si pak dost lidí může vyvodit nepravdivé tvrzení, jako že například heapů je vždy tolik, jako stacků, nebo že heap má stejně omezenou velikost jako stack...
      Tohle je vlastně něco, co jsem doteď pořádně nepochopil ani já: Jestliže je heap pod stackem, tak jak je možné, že tam lze naalokovat libovolnou velikost, nebo že tam nedochází k plýtvání pamětí (když dva kusy naalokuju, pak první kus uvolním a pak chci ještě větší kus paměti, tak ta se musí naalokovat úplně nahoře, jelikož by jí nezbylo místo)
      Tak jsem to radši do toho videa vůbec nedával :D Ale jinak good point

  • @moretttti
    @moretttti Před 2 měsíci +1

    díky grizlíku za tvou práci. RESPEKT!

  • @david-gameplay
    @david-gameplay Před 2 měsíci

    Dobré video, neskutečně lepší video oproti tomu kdy jsem tě začal sledoval (když jsi měl 18 odběratelů).

  • @matej9437
    @matej9437 Před 2 měsíci

    6.26 tisíc odběratelů.
    Sleduji tě asi od 300 odběratelů :-D

  • @Dea_je_nej
    @Dea_je_nej Před 2 měsíci +1

    Los Grizlikos :Dos

  • @moretttti
    @moretttti Před 2 měsíci

    a co udělat i povídání o tom jak to udělat nebezpečně? :)

  • @sgmvideos5175
    @sgmvideos5175 Před 2 měsíci

    3[pole]
    A realloc není pomalý, pokud jsou podmínky příznivé, ale když dojde místo, tak musí všechno z původní umístění zkopírovat... ale to se stejně dělá skoro vždy...

  • @Dento_45
    @Dento_45 Před 2 měsíci +2

    Vyjde Batch?

    • @GrizlikD
      @GrizlikD  Před 2 měsíci +1

      Jo, zase bych mohl natočit další video... Ale bude to spíše shrnutí všech příkazů z předchozích videí, abychom se v dalších videích už mohli posunout na random funkce, které s Batchem až tolik nesouvisí 😅

  • @Thund3rMan3
    @Thund3rMan3 Před 2 měsíci

    Realloc jsem pouzival vzdy pro vlozeni prvku do plneho pole, nevidim nic spatneho. Uz vim co jsi myslel bezpecnosti pameti, proste osetrovani vstupu, to je dulezite. Dalsim napadem na video jsou C++ pointery a smart pointery. C je voser.

    • @GrizlikD
      @GrizlikD  Před 2 měsíci

      Když se na to dívám zpětně, tak fakt to z toho videa zní, jako že funkce realloc() je špatná :D
      Není špatná, protože ono to ani nijak udělat nejde, ale zase by se neměla tato funkce používat třeba pro přidání jediného prvku do obrovského pole... Většinou se to v praxi řeší tak, že jakmile se pole naplní, tak se jeho velikost zdvojnásobí, ať vznikne nějaká rezerva pro další plnění daty, pořád je ale ještě optimálnější už rovnou naalokovat tolik paměti, kolik vím, že budu potřebovat (což ovšem v některých situacích nejde)

  • @Koniec128
    @Koniec128 Před 2 měsíci

    Co když nepoužiji funkci free()?

    • @int32_
      @int32_ Před 2 měsíci +1

      Nastane memory leak, program neuvolní paměť zpět operačnímu systému a nebude tak použitelná pro další programy. Pokud ten free nepoužiješ v nějakém cyklu tak to pak dopadne jako google chrome a sežere půlku ramky :D

  • @ivafeltlova3853
    @ivafeltlova3853 Před 2 měsíci +1

    První komentář :D

    • @SokyhoGulas
      @SokyhoGulas Před 2 měsíci

      🧛🏻‍♂️👍🏿👄

    • @GrizlikD
      @GrizlikD  Před 2 měsíci

      czcams.com/video/C_1V_tGrtlw/video.html