2010-01-28 12 views
5

Aşağıdaki, solaris üzerinde çalıştıktan sonra sonuç, iki yığın vardır, ama benim anlayışımda, bir süreç için, büyük bir sürekli bellek olan sadece bir yığın var boyutunu genişletmek veya küçültmek için brk tarafından yönetilebilir. Ve anon bellek için, bir süreç mmap/munmap tarafından yönetilebilen birçok anon belleğe sahip olabilir. Anlayışım doğru mu? veya pmap'in sonucunu yanlış okudum mu?yığın ponp anon anon bellek sonucu

sol9 # pmap -sX pgrep testprog

... 00022000 3960 3960 3960 - 8K rwx-- [yığın]

00400000 131072 131072 131072 - 4M rwx-- [yığın]

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

FF3B0000 8 8 8 - 8K rwx-- [anon]

...


toplam Kb 135.968 135.944 135.112 -

cevap

2

Hem doğru ve pmap çıkışını misreading vardır. pmap -x'u yapmış olsaydınız sonuçlar muhtemelen daha az kafa karıştırıcı olur, bu da yığını yalnızca bir kez gösterir, ancak -s bayrağını eklediğinizde, yığını farklı sayfa eşlemelerine sahip segmentlere ayırır.

0x0022000'den başlayan adresler, 4Mb bir sayfaya eşlenecek şekilde düzgün şekilde hizalanmamıştır, bu nedenle 3960 kb 8k sayfalar kullanırlar. 0x0022000 + (3960 * 1024) 0x00400000

0x00400000 adresinde adres 4Mb sayfalar için düzgün şekilde hizalanmış olduğundan, yığın daha az sayfa tablosu girdisi içeren daha büyük sayfaları kullanmaya geçiş yapar.

Yığınızın bir hizalama sınırına ulaşıncaya kadar 8k ile başlamak yerine 4Mb sayfalarını kullanmak için uygun hizada başlatıldığından emin olmak istiyorsanız, programınızı -M /usr/lib/ld/map.bssalign ile bağlayabilirsiniz.

Page Size and Memory Layout blog postSolaris Application Programming yazarı Darryl Gove'dan biraz daha ayrıntılı bir açıklama bulunabilir.

İlgili konular