需要对我的C应用程序进行内存分析..
应该包括占用空间大小和RAM大小......
例如,如果我的应用程序如下所示..
#include <stdio.h>
int global = 10; /* initialized global variable */
int test_code(void)
{
static int i = 100; /* Initialized static variable*/
return 0;
}
输出:
[putta@linux]$ gcc memory-layout.c -c memory-layout
[putta@linux]$ ls -ltrh memory-layout.o
760 Nov 9 18:26 memory-layout
[putta@linux]$ size memory-layout.o
text data bss dec hex filename
67 8 0 75 4b memory-layout.o
所以现在应该考虑哪些内存用于分析脚本,以及加载程序时的RAM ..
以下分析是否正确? 足迹内存= 760(这是闪存或硬盘) RAM = 67 + 8 + 0 = 75字节
需要专家建议
答案 0 :(得分:4)
如果你想知道你的程序在磁盘上的大小加上RAM中的文本和数据的大小,在Linux / Unix上你可以使用size命令:
$> size /bin/cat
text data bss dec hex filename
43422 1720 2472 47614 b9fe /bin/cat
size的输出是目标文件不同部分的内存大小:
最后两列 dec 和 hex 分别是十进制和十六进制的其他三列(总体大小)的总和。
您要求的大小是: ls 的输出(它给出了磁盘上的大小)加上输出的 dec 部分size 命令,为您提供RAM的大小。
另请参阅这些帖子:http://www.cyberciti.biz/faq/linux-find-size-of-text-data-segment-bss-uninitialized-data/,how to know the memory footprint of my binary executable
当引用软件应用程序时,足迹表示正在运行的进程所消耗的内存大小(运行时内存要求)。
说,很明显你应该在进程运行时检查内存占用。我认为(以及其他posts确认)唯一真正的选择是使用像 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
答案 1 :(得分:2)
此程序未定义:没有main
功能。
在这种情况下,编译器保留不编译任何内容的权利,因此导致占用空间和内存大小为零。