オブジェクトのメモリサイズを見つける
ディスク上のプログラムのサイズと RAM 内のテキストとデータのサイズを知りたい場合は、Linux/Unix で size コマンドを使用できます。
$> size /bin/cat
text data bss dec hex filename
43422 1720 2472 47614 b9fe /bin/cat
size の出力は、オブジェクト ファイルのさまざまな部分のメモリ サイズです。
- text : (コード セグメント) 実行可能な命令
- data : (データ セグメント) 初期化されたグローバル変数
- bss : (シンボルで始まるブロック) 静的に割り当てられた変数
最後の 2 つの列decとhexは、それぞれ他の 3 つの列 (全体のサイズ) の合計を 10 進数と 16 進数で表したものです。
求めているサイズは、lsの出力(ディスク上のサイズを示します) に、RAM 上のサイズを示すsizeコマンドの出力のdec部分を加えたものです。
これらの投稿も参照してください: http://www.cyberciti.biz/faq/linux-find-size-of-text-data-segment-bss-uninitialized-data/、バイナリ実行可能ファイルのメモリフットプリントを知る方法
メモリフットプリントを見つける
ソフトウェア アプリケーションを参照する場合、フットプリントは、実行中のプロセスによって消費されるメモリのサイズを示します (実行時のメモリ要件)。
プロセスの実行中にメモリフットプリントを確認する必要があることは明らかです。唯一の現実的な選択肢はvalgrindのようなツールを使用することだと思います (そして他の投稿で確認されています) 。
valgrind を使用してアプリケーションをプロファイリングする
Massifツールを使用してメモリをプロファイリングできます。Massifはヒーププロファイラーですが、スタックのサイズも測定できます。
valgrind --tool=massif --stacks=はい
これにより、ヒープとスタックの両方のメモリ使用量がわかります。その後、情報はファイル massif.out.???? に保存されます。あなたが読むことができる
ms_print massif.out.?????
ファイルの最初の出力は、実行時のメモリ使用量の優れたグラフです。
--------------------------------------------------------------------------------
Command: ./myprog -f d5.ini
Massif arguments: --stacks=yes
ms_print arguments: massif.out.24377
--------------------------------------------------------------------------------
MB
5.292^ ##
| @ : : @@ : : # :::: : :
| @:::: :: : :@:@@::::::::::::@ :::::::::::::# ::::@::::@::::::::
| @:: ::: :::::::::@:@ ::: :: :::: @ :: ::: ::::::# ::::@: ::@::::::::
| @:: ::: : :::: ::@:@ ::: :: :::: @ :: ::: ::::::# ::::@: ::@::::::::
| @:: ::: : :::: ::@:@ ::: :: :::: @ :: ::: ::::::# ::::@: ::@::::::::
| @:: ::: : :::: ::@:@ ::: :: :::: @ :: ::: ::::::# ::::@: ::@::::::::
| @:: ::: : :::: ::@:@ ::: :: :::: @ :: ::: ::::::# ::::@: ::@::::::::
| @:: ::: : :::: ::@:@ ::: :: :::: @ :: ::: ::::::# ::::@: ::@::::::::
| @:: ::: : :::: ::@:@ ::: :: :::: @ :: ::: ::::::# ::::@: ::@::::::::
| @@:: ::: : :::: ::@:@ ::: :: :::: @ :: ::: ::::::# ::::@: ::@::::::::
| @@:: ::: : :::: ::@:@ ::: :: :::: @ :: ::: ::::::# ::::@: ::@::::::::
| ::@@:: ::: : :::: ::@:@ ::: :: :::: @ :: ::: ::::::# ::::@: ::@::::::::
| : @@:: ::: : :::: ::@:@ ::: :: :::: @ :: ::: ::::::# ::::@: ::@::::::::
| : @@:: ::: : :::: ::@:@ ::: :: :::: @ :: ::: ::::::# ::::@: ::@::::::::
| : @@:: ::: : :::: ::@:@ ::: :: :::: @ :: ::: ::::::# ::::@: ::@::::::::
| : @@:: ::: : :::: ::@:@ ::: :: :::: @ :: ::: ::::::# ::::@: ::@::::::::
| : @@:: ::: : :::: ::@:@ ::: :: :::: @ :: ::: ::::::# ::::@: ::@::::::::
| : @@:: ::: : :::: ::@:@ ::: :: :::: @ :: ::: ::::::# ::::@: ::@::::::::
| : @@:: ::: : :::: ::@:@ ::: :: :::: @ :: ::: ::::::# ::::@: ::@::::::::
0 +----------------------------------------------------------------------->Gi
0 1.030
詳細は、異なるテーブル内のファイルに保存されます。出力を完全に理解するには、Valgrind のマニュアルページを参照してください。
子をトレースするオプションは次のとおりです。--trace-children=yes
興味深いことに、「プロセスの実際のメモリ使用量」はないようです:
https://unix.stackexchange.com/questions/164653/actual-memory-usage-of-a-process。