2010-01-28 5 views
5

Das folgende ist das Ergebnis nach dem Ausführen auf Solaris, es zeigt, gibt es zwei Haufen, aber in meinem Verständnis, für einen Prozess, gibt es nur einen Haufen, der eine große kontinuierliche Speicher ist kann von brk verwaltet werden, um die Größe zu erweitern oder zu verkleinern. Und für einen Speicher kann ein Prozess viele Speicher haben, die von mmap/munmap verwaltet werden können. Ist mein Verständnis richtig? oder habe ich das Ergebnis der Pmap falsch gelesen?Heap VS Anon Speicher im Ergebnis von pmap

sol9 # pmap -sx pgrep testprog

... 00022000 3960 3960 3960 - 8K rwx-- [Haufen]

00400000 131072 131072 131072 - 4M rwx-- [Haufen]

... FF390000 8 8 - - 8K rx-- libc_psr.so.1

FF3B0000 8 8 8 - 8K rwx-- [Anon]

...


insgesamt Kb 135.968 135.944 135.112 -

Antwort

2

Sie sind beide richtig und Verlesen der pmap Ausgang. Wenn Sie pmap -x getan hätten, wären die Ergebnisse wahrscheinlich weniger verwirrend, da der Heap nur einmal angezeigt wird. Da Sie jedoch das Flag -s hinzugefügt haben, wird der Heap in Segmente mit unterschiedlichen Seitenzuordnungen unterteilt.

Die Adressen, die mit 0x0022000 beginnen, sind nicht richtig ausgerichtet, um auf eine 4-Mb-Seite abgebildet zu werden, daher verwenden sie 3960-KB-Seiten mit 8.000 Seiten. 0x0022000 + (3960 * 1024) = 0x00400000

Bei 0x00400000 ist die Adresse ordnungsgemäß für 4 MB-Seiten ausgerichtet, so dass der Heap auf die größeren Seiten mit weniger Seitentabelleneinträgen umschaltet.

Wenn Sie sicherstellen wollten, dass Ihr Heap bei der richtigen Ausrichtung gestartet wurde, um 4MB-Seiten für das Ganze zu verwenden, anstatt mit 8k zu beginnen, bis eine Ausrichtungsgrenze erreicht wurde, dann würden Sie Ihr Programm mit -M /usr/lib/ld/map.bssalign verknüpfen.

Eine etwas ausführlichere Erklärung finden Sie in der Page Size and Memory Layout blog post von Solaris Application Programming Autor Darryl Gove.

Verwandte Themen