【问题标题】:No Change after the new in linux [duplicate]linux中的新功能后没有变化[重复]
【发布时间】:2013-11-12 15:58:04
【问题描述】:

我有一个类 ProcReader 用于在 linux 中生成进程的内存快照。 ProcReader 从 /proc/[pid]/status 读取信息,然后为该进程生成内存快照。我想测试这门课。所以我写了下面的代码。

 ShowMemSnapShot();

    unsigned char* pDynArray = NULL;

    pDynArray  = new unsigned char[2048];

 ShowMemSnapShot();

    pDynArray[0] = 1;

    delete [] pDynArray;

 ShowMemSnapShot();

问题:

\proc[pid]\status 中的 VmPeak 和 VmSize 没有变化。我不明白这一点。为什么?

【问题讨论】:

    标签: c++ linux proc


    【解决方案1】:

    我不确定,但这可能与您的分配大小有关。 proc 条目监控内核内存分配给您的进程,这些在 x86 平台上以 4K 页面发布。还有一个新的,它在底层使用了 malloc,当它需要更多的堆空间时,它可能会抓取一堆页面。

    我建议你分配一块像样的内存——比如 1MB

    pDynArray = 新的无符号字符[0x100000];

    【讨论】:

    • 我已尝试将数组大小更改为 20 页 = 20 * 4 KB。 VmSize 没有变化。但如果我将数组大小设置为大于 33 KB。 vmsize 的值有一个变化。我不知道为什么?或许,VmSize 中还有一些预留的地址空间。
    • 我在网上看过:VmSize = VmData + VmStk + VmExe + VmLib。但这是不正确的。这是我在 proc/pid/status 中的结果:
    • ************************之前****************** /proc/ 894/状态文件打开 nVmPeak=3252 nVmSize=3252 nVmHWM=980 nVmRSS=980 nVmData=192 nVmStk=136 nVmExe=8 nVmLib=2740 nVmPTE=8 nVmSWAP=0 *************** *****已声明****************** /proc/894/status 文件已打开 nVmPeak=3388 nVmSize=3388 nVmHWM=1032 nVmRSS=1032 nVmData=328 nVmStk=136 nVmExe=8 nVmLib=2740 nVmPTE=8 nVmSWAP=0 *********************已删除********************** * /proc/894/status 文件打开 nVmPeak=3388 nVmSize=3252 nVmHWM=1036 nVmRSS=1032 nVmData=192 nVmStk=136 nVmExe=8 nVmLib=2740 nVmPTE=8 nVmSWAP=0
    猜你喜欢
    • 1970-01-01
    • 2012-10-26
    • 2022-01-09
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    相关资源
    最近更新 更多