malloc & free

Libor Chocholaty libor_ml1 na mts.cz
Úterý Leden 31 00:01:17 CET 2006


Martin `MJ' Mares wrote:

>Hello, world!\n
>
>  
>
>>A alokace pomoci mmap() umoznuje, aby proces mel pridelen nesouvisly kus 
>>pameti? Jak jinak chcete pamet vracet kernelu? Mel jsem za to, ze proces 
>>muze mit vzdycky jen ruzne velky souvisly kus pameti.
>>    
>>
>
>Kdepak, to uz davno neni pravda, adresni prostor procesu muze byt
>libovolne nesouvisly, treba takto:
>  
>
Jasne, spatne jsem se vyjadril. Mel jsem na mysli, ze halda je souvisly 
kus pameti. Ale jak nize pise Jirka Kosina, tak ani to uz nemusi byt pravda.

---kraceno---

>>misto narokuje a pokud mu uz prideleny kus pameti nestaci, tak libc si 
>>rekne kernelu o dalsi. Naopak zase pomoci free() rika alokatoru v libc, 
>>ze tenhle kousek uz nebude potrebovat a alokator ho muze znovu pouzit 
>>pri nekterem pristim volani malloc(). Myslel jsem, ze pamet, kterou 
>>process dostane od kernelu, funguje jako pool a program pomoci volani 
>>funkci malloc() a free() z libc si s tou pameti hospodari. Kdyz se 
>>nedostava, tak si libc rekne o dalsi.
>>    
>>
>
>Tohle je pravda, ale ta pamet, kterou libc rozdeluje dal, nemusi byt nutne
>v jednom souvislem bloku. Je uz to nejaky cas, co jsem zdrojaky alokatoru
>naposledy cetl, ale tehdy se choval tak, ze kdyz jste ho pozadal o velky
>blok, pridelil ho mmapem
>
Takze kdyz chci pomoci malloc alokovat velky kus pameti, tak ho 
nedostanu z haldy? Koukam, ze bych si mel zopaknout par predmetu. :-)

Libor



Další informace o konferenci Linux