gpt4 book ai didi

c++ - statm 不报告更新的 VmSize

转载 作者:太空宇宙 更新时间:2023-11-04 11:23:27 37 4
gpt4 key购买 nike

我试图跟踪我的应用程序占用了多少内存。所以我正在阅读 /proc/self/statm

#include <iostream>
#include <fstream>

void print_mem(){
std::ifstream proc_stream("/proc/self/statm");
long long VmSize = 0, VmRSS = 0, Share = 0;
proc_stream >> VmSize >> VmRSS >> Share;
proc_stream.close();
std::cout << VmSize << " " << VmRSS << std::endl;
}

struct C{
int a[256];
};

int main(){
print_mem();// first call
C* c = new C;
print_mem();// second call
return 0;
}

我原以为 VmSize 会有所增长。但我看到的是它总是报告相同的 VmSize、VmRSS。当我分配 c 时,它不应该改变吗?

最佳答案

/proc/self/statm 实际上是在报告您的进程使用的虚拟内存大小。

编辑:

我设置了 [4096] 而不是 256 但我没有看到任何变化。但是,如果我将其更改为 [1024*1024],我会看到从 756 更改为 1782

我认为这与虚拟内存是什么有关:https://serverfault.com/a/138435可能会有帮助。我认为分配数组甚至 malloc() 不会为您提供程序实例分配的实际内存。我也会在这里查看答案:https://stackoverflow.com/a/1237930/1767191这建议您使用 /proc/self/smaps,它 显示每个进程映射的内存消耗。 根据 proc man。这意味着它将为您提供每个实例的内存消耗。

关于c++ - statm 不报告更新的 VmSize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16424472/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com