0

地块输出:

time=3220706
mem_heap_B=393242041
mem_heap_extra_B=73912175
mem_stacks_B=93616
heap_tree=peak

进程在VmRss中显示1.2GB,那么巨大的差异来自哪里?(我看到 Rss 不断增长)。

4

2 回答 2

1

根据http://cs.swan.ac.uk/~csoliver/ok-sa​​t-library/internet_html/doc/doc/Valgrind/3.8.1/html/ms-manual.html

堆分配函数(例如 malloc)建立在这些系统调用之上。例如,当需要时,分配器通常会调用 mmap 来分配一大块内存,然后将该内存块的一部分移交给客户端程序以响应对 malloc 等的调用。Massif 仅直接测量这些更高级别的 malloc 等调用,而不是较低级别的系统调用。

无法根据massif输出来保证 RSS 大小。使用--pages-as-heap=yes选项,您也许可以估计VIRT大小,但这包括映射到内存中的所有内容,而不必驻留在 RAM 中。

您可能想要使用alloc-fn选项,通过手动指定所有“自定义”内存分配函数,它可能使您更接近估计实际内存使用情况。

于 2018-07-06T18:54:29.117 回答
0

Valgrind 可以将大量内存用于自己的内部管理。因此,massif 报告的内存明显小于进程大小是正常的,因为进程大小包括“客户端/访客”内存 + valgrind 自己的内存。

您可以使用 valgrind 选项 --stats=yes 来获得有关客户端使用的内存与 valgrind 使用的内存的更多信息。

于 2017-09-09T21:53:44.923 回答