c++ - Linux:为什么smaps中的值不断增加?

标签 c++ linux memory-management

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

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

最佳答案

从操作系统分配内存非常昂贵,因此一次会分配大块堆。 new 尝试在预分配的堆上查找空位置,只有当没有空位置时,它才会从操作系统分配另一个 block 。从这个预分配的堆中释放也仅针对大块完成。 (您可以查看 manual page “mallopt” 了解如何使用环境调整行为。请注意,所有分配都需要在页面中完成,每个页面通常为 4 KiB 大。)

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

关于c++ - Linux:为什么smaps中的值不断增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30854501/

相关文章:

c++ - 匿名函数, "Parse Issue: Expected Expression"

c++ - 简单的 boost ASIO https 不返回正文

linux - 我如何在服务器上添加和同步我的本地 git?什么是裸仓库?

ios - 如何释放在方法中创建的字符串?

c++ - 头文件没有给函数声明

c++ - 使用 C++11 可变参数模板在编译时快速排序

java - 使用 bash globing 设置 Java 命令行属性

linux - 在linux中获取短运行程序的峰值内存(堆和堆栈)

C++ 程序无错退出。如何调试?

ios - 使用堆快照分析显示内存地址,但不显示代码行。如何确定导致堆增长的原因?