malloc overhead

 ( ruczati | 2004. július 20., kedd - 14:45 )

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Sziasztok,

lehet azt tudni, hogy egy malloc hivasnal a kernel tenylegesen mennyi memoriat hasznal el az igenyelt terulet lefoglalasara? Gondolok itt arra, hogy neki is meg kell jegyezni, hogy mit adott ki, kinek (processz id? userid?), stb...

Masreszt mi az a legkisebb foglalasi egyseg, aminel a teljes elhasznalt memoria a lehetseges minimum fele tart?

Ja, es ezt mennyire valtozik linux/openbsd/freebsd/mittomen kornyezetben?

(bar lehet, h megtalalnam valami doksiban is, ha nagyon keresnem...)

Koszi,
r

[quote:e80fd77eab="ruczati"]Slehet azt tudni, hogy egy malloc hivasnal a kernel tenylegesen mennyi memoriat hasznal el az igenyelt terulet lefoglalasara? Gondolok itt arra, hogy neki is meg kell jegyezni, hogy mit adott ki, kinek (processz id? userid?), stb...

Masreszt mi az a legkisebb foglalasi egyseg, aminel a teljes elhasznalt memoria a lehetseges minimum fele tart?[/quote:e80fd77eab]

A malloc nem kernel hívás, hanem libc. A kernel hívás neve brk() és ezt nagyon nem illik userspace progiból használni. A glibc neked szépen menedzseli a cuccokat, tehát tudtommal nem egy az egyben képzi le a malloc és free hívásokat brk hívásokra, hanem csoportosítva, saját maga memóriát kezelve stb. Persze úgy sejtem, hogy ez esetben a glibc viselkedésére vagy kíváncsi, hát ebben nem nagyon tudok segíteni. Mondjuk aligha érdemes milliószor lefoglalni 10 byte-ot.

A linux kernelben meglehetosen regota benne van, hogy egy malloc valojaban nem foglal rogton memoriat, csak akkor ha valojaban bele is ir a process.
az overhead-rol nincs infom.
talan erdemes lenne angolul az LKML-en kerdezned. erdekes kerdes, de specialis szaktudast igenyel a megvalaszolasa;))

Bár a választ nem tudom, de van egy-két ötletem, hogy hogyan tudhatod meg:
1. pár soros programmal (lefoglalsz néhány milliószor 1 byte-ot, és kiíratod a szabad memóriát)
2. megnézed a glibc forrását

Nagyobb memóriafoglalásokhoz asszem a glibc mmap-ot használ, ami - ha jól tudom - x86-on 4k granularity.