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

How can a C++ application use more Heap than RSS Memory?

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

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

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

但是,现在我认为等式是错误的,因为我的申请有:

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

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

谢谢

正如@user4581301 在评论中指出的,我对 RSS 的理解有问题。

HEAP = DynamicMemoryAllocated

RSS = DynamicMemoryInitialized + Stack + Shared + CodeSize

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

如果为 10Mb 数组分配 space,这就是 HEAP。 如果你开始初始化它,那么初始化的部分将被算作RSS。

RSS 是 常驻 设置大小。

并非所有堆都必须驻留 - 例如,它可能会被换出。

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