Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Michal Pánek:17. února 21:42

Zdravim.
Kdyz definuji a inicializuji promennou napr.

int *p_cislo = (int *) malloc(10 * sizeof(int));
free( (void *) p_cislo);

Kde jsou ulozena metadata o velikosti alokovaneho pole pomoci malloc.
Vsak ta funkce free() prijima jen informaci o bazove adrese toho ukazatele.
Jak pozna funkce free() kolik mista uvolnit nebo jak to funguje ?

Editováno 17. února 21:44
 
Odpovědět
17. února 21:42
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Michal Pánek
DarkCoder:17. února 22:12

Oblast haldy, která je alokována po dynamické alokaci paměti pomocí funkce malloc(), je o jeden word větší než požadovaná paměť. Tento dodatečný word je použit k uložení metadat, jako je velikost alokovaného bloku. Metadata jsou typicky uložena před začátkem alokovaného bloku paměti. Takže když je později volána funkce free() s adresou začátku bloku, může přistoupit k těmto metadatům a zjistit, kolik paměti má být uvolněno. Tímto způsobem je free() schopna správně dealokovat alokovanou paměť.

Nahoru Odpovědět
17. února 22:12
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Michal Pánek:17. února 22:24

Co to je ten word. Pripadne neni nekde podrobnejsi info v cestine. Rad bych si o tom precetl. Nebo uz to zasahuje mimo programovani v c do jine problematiky. Jako ukladani dat pod danym OS atd.

 
Nahoru Odpovědět
17. února 22:24
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Michal Pánek
DarkCoder:17. února 22:43

Termín "word" v tomto kontextu označuje jednotku paměti, která je typicky ekvivalentní s velikostí registru nebo základní jednotkou dat se kterou procesor pracuje. Velikost slova se může lišit v závislosti na architektuře procesoru a operačním systému. Ta může být například 32 bitů (4 bajty) nebo 64 bitů (8 bajtů) v závislosti na architektuře procesoru. Tato informace je však specifická pro technické detaily a nemusí být vždy důležitá při běžném programování v jazyce C.

Podrobnější informace o správě paměti mohou být popsány v knihách o programování v C. Mohou existovat také zdroje zaměřené na operační systémy a správu paměti, které poskytují hlubší vhled do tohoto tématu, včetně způsobu, jakým operační systémy alokují a uvolňují paměť pro procesy.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
17. února 22:43
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Michal Pánek:17. února 23:03

dekuji, ale asi se jako clovek co se uci zaklady zaobiram pokrocilejsi tematikou. Nejdrive budu pokracovat v zakladech

 
Nahoru Odpovědět
17. února 23:03
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Michal Pánek
DarkCoder:17. února 23:30

Přesně tak, to jsou tak specifické detaily, že se tímto nemusíš vůbec zaobírat. Důležité je vědět, že free() funguje tak jak má, že informaci o velikosti alokovaného bloku paměti zná a správně jej uvolní. Pokud si nebudeš s něčím vědět rady, napiš příspěvek do fora a podíváme se na to..

Editováno 17. února 23:32
Nahoru Odpovědět
17. února 23:30
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.