Linux:为什么smaps中的值会不断增加?

时间:2015-06-15 20:34:10

标签: c++ linux memory-management

我总结了当前程序的映射值。在一段时间内重复这一点。将结果保存在文件中,然后我绘制它。我发现有点奇怪的是,不同的smaps字段的值似乎或多或少线性增加。我还在c ++中使用new命令分配了一些内存。我释放了记忆,但没有明显的区别。我在田野的情节中接受了一些上下运动。不幸的是,没有任何上下运动。

这种行为是正常还是我做错了?但我很确定,我的解析器有效,因为我用pmap检查了它。我的解析器和pmap为同一个进程返回相同的结果。

1 个答案:

答案 0 :(得分:0)

从OS分配内存非常昂贵,因此一次分配大块堆。 new尝试在预先分配的堆上找到空位,并且只有在没有的情况下,它才会从OS分配另一个块。从这个预先分配的堆中解除分配也仅使用大块。 (您可以检查manual page “mallopt”如何使用环境调整行为。请注意,所有分配都需要在页面中完成,每个页面通常为4 KiB大。)

这适用于小内存分配。大型分配(默认情况下,128 KiB或更高,再次可以使用mallopt调整)使用匿名mmap完成,并在释放时释放。