查找对象的内存大小
如果您想知道程序在磁盘上的大小以及RAM中文本和数据的大小,则在Linux / Unix上可以使用size命令:
$> size /bin/cat
text data bss dec hex filename
43422 1720 2472 47614 b9fe /bin/cat
size命令的输出是目标文件不同部分的内存大小:
- text:(代码段)可执行指令
- data:(数据段)初始化的全局变量
- bss:(块开始于符号)静态分配的变量
最后两列dec和hex分别是三个列的总和(总大小)的十进制和十六进制。
您正在请求的大小是:ls的输出(给出磁盘上的大小)加上size命令的dec部分的输出(给出RAM上的大小)。
另请参阅以下内容:http://www.cyberciti.biz/faq/linux-find-size-of-text-data-segment-bss-uninitialized-data/,如何知道我的二进制可执行文件的内存占用情况。
查找内存占用情况
当涉及到软件应用程序时,占用情况表示运行进程消耗的内存大小(运行时内存需求)。
因此,在进程运行时应检查内存占用情况。我认为(其他文章也证实了这一点),唯一真正的选择是使用像valgrind这样的工具。
使用valgrind对应用程序进行分析
您可以使用Massif工具对内存进行分析。 Massif是一个堆分析器,但也可以测量栈的大小。
valgrind --tool=massif --stacks=yes
这将为您提供堆和栈内存使用情况。然后,信息存储在文件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手册
page,该手册似乎非常清晰。
跟踪子进程的选项是:
--trace-children=yes
有趣的是,似乎没有"
进程的实际内存使用情况":
https://unix.stackexchange.com/questions/164653/actual-memory-usage-of-a-process。