我总结了当前程序的映射值。在一段时间内重复这一点。将结果保存在文件中,然后我绘制它。我发现有点奇怪的是,不同的smaps字段的值似乎或多或少线性增加。我还在c ++中使用new命令分配了一些内存。我释放了记忆,但没有明显的区别。我在田野的情节中接受了一些上下运动。不幸的是,没有任何上下运动。
这种行为是正常还是我做错了?但我很确定,我的解析器有效,因为我用pmap检查了它。我的解析器和pmap为同一个进程返回相同的结果。
答案 0 :(得分:0)
从OS分配内存非常昂贵,因此一次分配大块堆。 new
尝试在预先分配的堆上找到空位,并且只有在没有的情况下,它才会从OS分配另一个块。从这个预先分配的堆中解除分配也仅使用大块。 (您可以检查manual page “mallopt”如何使用环境调整行为。请注意,所有分配都需要在页面中完成,每个页面通常为4 KiB大。)
这适用于小内存分配。大型分配(默认情况下,128 KiB或更高,再次可以使用mallopt调整)使用匿名mmap
完成,并在释放时释放。