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つはヒープ使用統計には表示されず、memusage
72,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で同様のことをしていると思いますが、メモリスペースが異なる可能性があり、起動ヒープ使用量が含まれていない可能性があります。