malloc & free

Martin `MJ' Mares mj na ucw.cz
Pondělí Leden 30 19:05:18 CET 2006


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:

| mares na camellia:~$ cat /proc/self/maps
| 08048000-0804c000 r-xp 00000000 03:02 325764     /bin/cat
| 0804c000-0804d000 rw-p 00003000 03:02 325764     /bin/cat
| 0804d000-0806e000 rw-p 0804d000 00:00 0          [heap]
| b7dce000-b7e48000 r--p 00000000 03:02 32973      /usr/lib/locale/locale-archive
| b7e48000-b7e49000 rw-p b7e48000 00:00 0 
| b7e49000-b7f73000 r-xp 00000000 03:02 181753     /lib/tls/libc-2.3.2.so
| b7f73000-b7f7c000 rw-p 00129000 03:02 181753     /lib/tls/libc-2.3.2.so
| b7f7c000-b7f7e000 rw-p b7f7c000 00:00 0 
| b7f90000-b7f91000 rw-p b7f90000 00:00 0 
| b7f91000-b7fa7000 r-xp 00000000 03:02 49955      /lib/ld-2.3.2.so
| b7fa7000-b7fa8000 rw-p 00015000 03:02 49955      /lib/ld-2.3.2.so
| bf891000-bf8a7000 rw-p bf891000 00:00 0          [stack]
| ffffe000-fffff000 ---p 00000000 00:00 0          [vdso]

> 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, aby ho pak zase mohl samostatne uvolnit, zatimco
male blocky ziskaval z haldy pridelene brkem.

				Have a nice fortnight
-- 
Martin `MJ' Mares   <mj na ucw.cz>   http://atrey.karlin.mff.cuni.cz/~mj/
Faculty of Math and Physics, Charles University, Prague, Czech Rep., Earth
COBOL -- Completely Outdated, Badly Overused Language


Další informace o konferenci Linux