C++应用程序如何使用比 RSS 内存更多的堆



我有一个C++的多线程应用程序的可执行文件,它涉及UDP端口的打开。

我正在使用不同的工具测量此应用程序的内存使用情况。

根据我对 Linux 内存使用情况的理解,RSS = Heap + Stack + Shared + CodeSize .

但是,现在我认为这个等式是错误的,因为我的应用程序有:

  • 峰值堆使用量:40Mb
  • 峰值 RSS:30Mb

我用不同的工具(valgrindheaptracktop等(测量了这些数字,所以我可以说它们是正确的。

怎么可能?这种情况的原因和后果是什么?

谢谢

正如@user4581301在评论中指出的那样,我对RSS的想法存在问题。

HEAP = DynamicMemoryAllocated

RSS = DynamicMemoryInitialized + Stack + Shared + CodeSize

因此,并不是所有的堆大小都包含在 RSS 中,而只包含已初始化的部分。

如果为 10Mb 阵列分配空间,则这就是堆。如果您开始初始化它,则初始化的部分将计为 RSS。

RSS 是常驻集大小。

并非所有堆都一定是常驻的 - 例如,它可能会被换掉。

但是,虚拟内存使用情况将包括所有堆(常驻和非驻留部分(。

最新更新