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ý
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
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...
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.
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)
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í 😅
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
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ý
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
díky grizlíku za tvou práci. RESPEKT!
Dobré video, neskutečně lepší video oproti tomu kdy jsem tě začal sledoval (když jsi měl 18 odběratelů).
Díky :D
6.26 tisíc odběratelů.
Sleduji tě asi od 300 odběratelů :-D
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...
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.
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)
Los Grizlikos :Dos
a co udělat i povídání o tom jak to udělat nebezpečně? :)
Vyjde Batch?
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í 😅
Co když nepoužiji funkci free()?
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
První komentář :D
🧛🏻♂️👍🏿👄
th-cam.com/video/C_1V_tGrtlw/w-d-xo.html