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

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

最佳答案

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

这适用于较小的内存分配。较大的分配(默认情况下为128 KiB或更大,可以再次使用mallopt进行调整)是使用匿名mmap完成的,释放后将被释放。

09-15 17:18