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