60

アプリケーションがプログラム自体から消費しているメモリの量を調べようとしています。私が探しているメモリ使用量は、Windows タスク マネージャーの [プロセス] タブの [メモリ使用量] 列に表示される数値です。

4

5 に答える 5

57

GetProcessMemoryInfoは、指定されたプロセスに関するさまざまなメモリ情報を報告します。GetCurrentProcess()呼び出しプロセスに関する情報を取得するために、プロセス ハンドルとして渡すことができます。

おそらく、のWorkingSetSizeメンバーPROCESS_MEMORY_COUNTERSは、タスク マネージャーのメモリ使用列に最も近いものですが、まったく同じにはなりません。さまざまな値を試して、ニーズに最も近い値を見つけます。

于 2008-11-11T21:39:42.843 に答える
24

これがあなたが探していたものだと思います:

#include<windows.h>
#include<stdio.h>   
#include<tchar.h>

// Use to convert bytes to MB
#define DIV 1048576

// Use to convert bytes to MB
//#define DIV 1024

// Specify the width of the field in which to print the numbers. 
// The asterisk in the format specifier "%*I64d" takes an integer 
// argument and uses it to pad and right justify the number.

#define WIDTH 7

void _tmain()
{
  MEMORYSTATUSEX statex;

  statex.dwLength = sizeof (statex);

  GlobalMemoryStatusEx (&statex);


  _tprintf (TEXT("There is  %*ld percent of memory in use.\n"),WIDTH, statex.dwMemoryLoad);
  _tprintf (TEXT("There are %*I64d total Mbytes of physical memory.\n"),WIDTH,statex.ullTotalPhys/DIV);
  _tprintf (TEXT("There are %*I64d free Mbytes of physical memory.\n"),WIDTH, statex.ullAvailPhys/DIV);
  _tprintf (TEXT("There are %*I64d total Mbytes of paging file.\n"),WIDTH, statex.ullTotalPageFile/DIV);
  _tprintf (TEXT("There are %*I64d free Mbytes of paging file.\n"),WIDTH, statex.ullAvailPageFile/DIV);
  _tprintf (TEXT("There are %*I64d total Mbytes of virtual memory.\n"),WIDTH, statex.ullTotalVirtual/DIV);
  _tprintf (TEXT("There are %*I64d free Mbytes of virtual memory.\n"),WIDTH, statex.ullAvailVirtual/DIV);
  _tprintf (TEXT("There are %*I64d free Mbytes of extended memory.\n"),WIDTH, statex.ullAvailExtendedVirtual/DIV);


}
于 2011-12-14T05:50:25.657 に答える
9

GetProcessMemoryInfo は、探している関数です。MSDN のドキュメントが正しい方向を示しています。渡した PROCESS_MEMORY_COUNTERS 構造体から必要な情報を取得します。

psapi.h を含める必要があります。

于 2008-11-11T21:41:16.693 に答える
7

GetProcessMemoryInfoを見てみてください。私はそれを使用していませんが、必要なもののようです。

于 2008-11-11T21:41:23.527 に答える