0

アプリケーションが使用しているメモリの量を追跡しようとしていました。だから私は読んで/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んか?

4

1 に答える 1

1

/proc/self/statm実際、プロセスで使用される仮想メモリのサイズを報告しています。

編集:

I set a[4096] instead of 256 But I don't see any change. However If I change it to a[1024*1024] I see a change from 756 to 1782

仮想メモリとは何かに関係していると思います:https://serverfault.com/a/138435が役立つかもしれません。配列や malloc() を割り当てても、プログラムのインスタンスによって割り当てられた実際のメモリが得られるとは思いません。ここで答えをチェックすることもできます: https://stackoverflow.com/a/1237930/1767191これは、proc man に従って/proc/self/smapswhichを使用することを示唆しています。これは、インスタンスshows memory consumption for each of the process's mappings.ごとのメモリ消費量を示すことを意味します。

于 2013-05-07T17:24:44.103 に答える