查找对象的内存大小
如果您想知道磁盘上程序的大小以及 RAM 中文本和数据的大小,在 Linux/Unix 上,您可以使用 size 命令:
$> size /bin/cat
text data bss dec hex filename
43422 1720 2472 47614 b9fe /bin/cat
size 的输出是目标文件不同部分的内存大小:
- text:(代码段)可执行指令
- 数据:(数据段)初始化的全局变量
- 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 手册页,它看起来非常清楚。
跟踪孩子的选项是:--trace-children=yes
有趣的是,似乎没有“进程的实际内存使用情况”:
https ://unix.stackexchange.com/questions/164653/actual-memory-usage-of-a-process 。