Jak se malloc_info () funguje?

hlasů
7

Snažil jsem se přijít na to, jak se funkce malloc_info () se sídlem v malloc.h děl. Vím, že budete muset projít to soubor * a žádné možnosti jsou dosud provedena, ale já jsem na rozpacích, jak na to, co je ve skutečnosti hlásí !? Kromě toho jsem napsal testovací aplikaci, která alokuje spoustu paměti a hodnoty uvedené z malloc_info () nemění, vyjma případů, kdy jsem udělal přidělení 20.000 1 byte?

Je tu někdo tam venku, kdo má nějaké zkušenosti s malloc_info () a může vrhnout trochu světla na to, co aspekty paměti to má měřit?

Je třeba poznamenat, že bych mohl najít téměř nic o Google o malloc_info (), jen některé útržkovité hlášení chyb.

Příklad výstupu z malloc_info ():

<malloc version=1>
    <heap nr=0>
        <sizes>
        </sizes>
        <total type=fast count=0 size=0/>
        <total type=rest count=0 size=0/>
        <system type=current size=135168/>
        <system type=max size=135168/>
        <aspace type=total size=135168/>
        <aspace type=mprotect size=135168/>
    </heap>
    <total type=fast count=0 size=0/>
    <total type=rest count=0 size=0/>
    <system type=current size=135168/>
    <system type=max size=135168/>
    <aspace type=total size=135168/>
    <aspace type=mprotect size=135168/>
</malloc>

UPRAVIT:

Jako další vysvětlení; můj záložní pozice je funkce mallinfo (), ale doufal jsem, že pouze malloc_info () jako z toho, co se mi to může shromažďovat je určena k nahrazení mallinfo (). To, co jsem našel je, že mallinfo () a malloc_info () nefungují stejně. V mých testů mallinfo () sleduje všechny své alokace, zatímco malloc_info () neučiní vůbec. Mohu jen předpokládat, že malloc_info () je v současné době zlomené, nebo není sloužit stejnému účelu jako mallinfo ().

V článku dané omnifarious existují dobré důvody, které mallinfo () by měla být zastaralé:

to je naprosto nevhodné pro 64bitové stroje. Datové typy vyžadované sysv spec neumožňují hodnot větších 2 ^ 31 bajtů (všechna pole ve struktuře jsou ints). Druhým problémem je, že datová struktura je velmi specifická pro implementace malloc sysv používané v té době.

Nicméně si myslím, že v této době malloc_info () ještě není připraven přijmout, že je to místo.

DALŠÍ EDIT: Po trochu kopat zdá se, že malloc_info () hlásí velikost Arena Z mallinfo () ve všech místech, kde se objeví 135168 (alespoň, že to, co to odpovídá). To se zdá být mnohem méně užitečný a je velmi jednorozměrný údaj ve srovnání s tím, co mallinfo () umožňuje.

Položena 11/10/2010 v 07:01
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
1

Jen zmínit linux projektu man-pages poskytuje manuálové stránky pro malloc_info od verze 3.41:

http://man7.org/linux/man-pages/man3/malloc_info.3.html

Odpovězeno 05/06/2012 v 18:34
zdroj uživatelem

hlasů
1

Velké alokace se obvykle řeší jen říkat OS „Musím x počet paměťových stránek.“, Často tím, že mmaping /dev/zero. Alokace větší než strana nebo 4 (A strana je Vetšinou 4096 bytes) jsou obvykle řešeny tímto způsobem a tyto příděly nejsou věci bych očekávat malloc diagnostický sledovat.

Bohužel, nemám nic víc, než kdokoli jiný o malloc_info vědět. LJ příspěvek o odstranění mallinfo (mimo jiné), Ulrich Drepper, naše nevyčíslitelné autor glibc, se jeví jako nejlepší dostupné informace, a to je docela zatraceně tenký, a to, co by si asi našel pomocí Google tak jako tak.

Program, který jsem vložit na paste.lisp.org by měl běžet mallocpřes Je to kroků a vytisknout informace haldy. Je to velmi Linux a gcc specifické, ale samozřejmě, takže je to otázka. Možná si hrát si s výstupem zkušebního programu vám nějaké nahlédnutí do toho, co se to vlastně mluví.

Odpovězeno 11/10/2010 v 12:59
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more