最大メモリ使用量を測定する方法は?

最大メモリ使用量を測定する方法は?

C++プログラムがあります。このプログラムの最大メモリ使用量を知りたいです。 GNU Cライブラリを試しましたmemusageが、結果はWindowsと同じではありません。なぜそんなことですか?

これは私のテストプログラムです。

#include <cstdio>
#include <iostream>
#include <vector>
#include <queue>
#include <list>

int main()
{
return 0;
}

memusage以下は、使用された72,704バイトを示す出力です。

Memory usage summary: heap total: 72704, heap peak: 72704, stack peak: 0
         total calls   total memory   failed calls
 malloc|          1          72704              0
realloc|          0              0              0  (nomove:0, dec:0, free:0)
 calloc|          0              0              0
   free|          0              0

Windowsでは、出力は0Bとして表示されます。

ベストアンサー1

GNU CライブラリとGCCの標準C ++ライブラリは、次の目的でmallocプログラムの起動中(実行前)にヒープメモリを割り当てて呼び出します。main

  • 動的リンク
  • vDSOの設定(GNU Cライブラリを使用しているLinux上のすべてのプログラムがこれを行います)
  • 緊急例外処理の事前割り振り (割り当てるメモリーがなくても常に例外を処理できるようにメモリーを割り振ること)

最初の2つはヒープ使用統計には表示されず、memusage72,704バイトの割り当てはC ++例外処理の割り当てに対応します。 Valgrindの出力も参照してください。

$ valgrind ./memtest
==822129== Memcheck, a memory error detector
==822129== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==822129== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
==822129== Command: ./memtest
==822129== 
==822129== 
==822129== HEAP SUMMARY:
==822129==     in use at exit: 0 bytes in 0 blocks
==822129==   total heap usage: 1 allocs, 1 frees, 72,704 bytes allocated
==822129== 
==822129== All heap blocks were freed -- no leaks are possible
==822129== 
==822129== For lists of detected and suppressed errors, rerun with: -s
==822129== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

すべてのメモリ時間の合計メモリ使用量を表示するには、次の簡単なツールを使用してください/usr/bin/time

$ /usr/bin/time ./memtest
0.00user 0.00system 0:00.00elapsed 100%CPU (0avgtext+0avgdata 3148maxresident)k
0inputs+0outputs (0major+117minor)pagefaults 0swaps

これは、プログラムが最大3,148Kのメモリを使用したことを示します。 (/usr/bin/time代わりに使用してくださいtime- 後者はこの情報を表示しない可能性があるシェルの組み込み機能を使用します。)

C ++プログラムはWindowsで同様のことをしていると思いますが、メモリスペースが異なる可能性があり、起動ヒープ使用量が含まれていない可能性があります。

おすすめ記事