c++ - 特定 - visual studio プロセスメモリ 増え続ける



C++プログラムの内部からメモリ使用量を測定する方法は? (2)

C ++プログラムで、プログラムが一度に使用しているメモリ量を追跡することは可能ですか?

例えば、プロトタイプを持つ関数:

int getEstimatedTotalMemoryUsage();

私はそれが可能でない場合、1つは、プログラムから出て、システムコールを行い、そこから結果をチェックしなければならないと思います。 もしそうなら、そのような目的のためにどんなツールが利用できるのですか? そのようなことが可能であると仮定します。

編集:私はあなたのためにこれを行うことができますlinux、任意のツールを使用していますか?


PIDを取得する: pid_t getpid(void); // unistd.h pid_t getpid(void); // unistd.h

パース/proc/<id>/smaps

あなたがmemの合計で共有ライブラリを気にしないなら、それはもっと簡単かもしれません

ps -p <id> -o %memへのシステムコールを行う


はい - POSIX getrusage使用します。 Linuxのmanページから

シノプシス

#include <sys/time.h>
#include <sys/resource.h>

int getrusage(int who, struct rusage *usage);

説明

getrusage()は、 RUSAGE_SELFまたはRUSAGE_CHILDRENのいずれかのRUSAGE_SELF現在のリソース使用getrusage()返します。 前者は現在のプロセスで使用されているリソースを要求し、後者は終了し待機していた子プロセスのリソースが使用するリソースを要求します。

struct rusage {
    struct timeval ru_utime; /* user time used */
    struct timeval ru_stime; /* system time used */
    long   ru_maxrss;        /* maximum resident set size */
    long   ru_ixrss;         /* integral shared memory size */
    long   ru_idrss;         /* integral unshared data size */
    long   ru_isrss;         /* integral unshared stack size */
    long   ru_minflt;        /* page reclaims */
    long   ru_majflt;        /* page faults */
    long   ru_nswap;         /* swaps */
    long   ru_inblock;       /* block input operations */
    long   ru_oublock;       /* block output operations */
    long   ru_msgsnd;        /* messages sent */
    long   ru_msgrcv;        /* messages received */
    long   ru_nsignals;      /* signals received */
    long   ru_nvcsw;         /* voluntary context switches */
    long   ru_nivcsw;        /* involuntary context switches */
};




memory-management