処理中に割り当てられたヒープの最大量を知りたい。C++。プロセスが最初から割り当てた最大量のメモリを取得するには?
mallinfo()
は、現在割り当てられているメモリの量を示します。だから、allinfo()
を別のスレッドで頻繁に尋ねて最大値を保存することができます。
しかし、プロセスに関するこのような情報は、システムのどこかに書かれていますか?まず第一に私はWindowsに興味があります。
処理中に割り当てられたヒープの最大量を知りたい。C++。プロセスが最初から割り当てた最大量のメモリを取得するには?
mallinfo()
は、現在割り当てられているメモリの量を示します。だから、allinfo()
を別のスレッドで頻繁に尋ねて最大値を保存することができます。
しかし、プロセスに関するこのような情報は、システムのどこかに書かれていますか?まず第一に私はWindowsに興味があります。
いいえ、プロセスが起動してから使用されているヒープメモリの最大量を記録するシステムはありません。
プロファイリングのみの場合は、valgrindのマージフのようなプロファイリングツールを使用できます。私は窓のためのツールが何かを知っていませんが、確かにそこにあります。
MS-Windowsの場合、GetProcessMemoryInfo()機能を使用します。これにより、さまざまなサイズの構造体が得られます。あなたは自分のために何が何であるかを見るためにテストしたいと思うでしょうが、それはかなりよく書かれていると思います。
あなたはこのように見える構造を取得するには:Linuxの場合
typedef struct _PROCESS_MEMORY_COUNTERS {
DWORD cb;
DWORD PageFaultCount;
SIZE_T PeakWorkingSetSize;
SIZE_T WorkingSetSize;
SIZE_T QuotaPeakPagedPoolUsage;
SIZE_T QuotaPagedPoolUsage;
SIZE_T QuotaPeakNonPagedPoolUsage;
SIZE_T QuotaNonPagedPoolUsage;
SIZE_T PagefileUsage;
SIZE_T PeakPagefileUsage;
} PROCESS_MEMORY_COUNTERS, *PPROCESS_MEMORY_COUNTERS;
この時点で私を逃れインターフェースがありますが、あなたはまた、プロセスのステータスファイル内の情報を見つけることができます。だから、プロセス自体から、あなたはGETPID()およびその状態からファイルを読んでください:
std::string status_filename("/proc/" + std::to_string(getpid()) + "/status");
std::ifstream status(status_filename, std::ios::in);
... // read file 'status'
Vm
で始まる行は、それらのあるもの興味。たとえば、VmPeak
は、プロセスでこれまで使用されていた最大メモリ量を示します。
さらに詳しい情報は、Runtime Memory MeasurementをLinuxでご覧ください。
方法がある場合は、特定のmalloc実装固有のものです。どのコンパイラを使用していますか? –