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

Linux: Why do the values in smaps increase continuously?

本文关键字:不断增加 为什么 smaps Linux      更新时间:2023-10-16

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

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

从操作系统分配内存非常昂贵,因此一次分配大块堆。 new尝试在预分配的堆上找到空位,并且只有在没有空位时,它才会从操作系统中分配另一个块。 从这个预分配的堆中解除分配也只对大块进行。(您可以查看手册页"mallopt",了解如何使用环境调整行为。请注意,所有分配都需要在页面中完成,每个页面通常为 4 KiB 大。

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