gpt4 book ai didi

pmap结果中的堆VS匿名内存

转载 作者:行者123 更新时间:2023-12-03 15:31:28 25 4
gpt4 key购买 nike

以下是在solaris上运行后的结果,显示有两个堆,但在我的理解中,对于一个进程来说,只有一个堆是一个大的连续内存,可以通过brk管理来扩展或缩小大小。而对于匿名内存,一个进程可以拥有多个匿名内存,可以通过 mmap/munmap 进行管理。我的理解正确吗?或者我错误地读取了 pmap 的结果?

sol9# pmap -sx pgrep testprog
...
00022000 3960 3960 3960 - 8K rwx-- [堆]

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

...
FF390000 8 8 - - 8K r-x-- libc_psr.so.1

FF3B0000 8 8 8 - 8K rwx-- [匿名]

...

总 Kb 135968 135944 135112 -

最佳答案

您既正确又误读了 pmap 输出。如果你做了 pmap -x结果可能不会那么困惑,只显示一次堆,但是因为您添加了 -s标志,它将堆分解为具有不同页面映射的段。

从 0x0022000 开始的地址没有正确对齐以映射到 4Mb 页,因此它们使用 3960kb 的 8k 页。 0x0022000+(3960*1024) = 0x00400000

在 0x00400000 处,地址正确对齐 4Mb 页,因此堆切换到使用具有较少页表条目的较大页。

如果你想确保你的堆以正确的对齐方式开始,以便为整个事情使用 4Mb 的页面而不是从 8k 开始直到它达到对齐边界,那么你可以将你的程序链接到 -M /usr/lib/ld/map.bssalign 要做到这一点。

更深入的解释可以在 Page Size and Memory Layout blog post 中找到。来自 Solaris Application Programming作者 Darryl Gove .

关于pmap结果中的堆VS匿名内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2151543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com