需要对我的C应用程序进行内存分析。
它应该包括内存大小和内存大小..。
例如,如果我的应用程序如下所示。
#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 (这是闪存或硬盘)内存= 67+8+0 = 75字节
需要专家的建议
发布于 2015-11-09 14:18:24
查找对象的内存大小
如果您想知道磁盘上程序的大小以及RAM中文本和数据的大小,那么在Linux/Unix上可以使用size命令:
$> size /bin/cat
text data bss dec hex filename
43422 1720 2472 47614 b9fe /bin/cat大小的输出是对象文件的不同部分的内存大小:
最后两列,dec和十六进制,分别是以十进制和十六进制表示的其他三列(总体大小)的之和。
您所要求的大小是: ls的输出(给出磁盘上的大小),再加上size命令输出的dec部分,后者给出了RAM上的大小。
也请参阅这些帖子:http://www.cyberciti.biz/faq/linux-find-size-of-text-data-segment-bss-uninitialized-data/,如何知道二进制可执行文件的内存占用量
查找内存占用量
当引用软件应用程序时,内存占用指示运行过程所消耗的内存的大小(运行时内存需求)。
这么说,很明显,当进程运行时,您应该检查内存占用情况。我认为(以及其他帖子证实了这一点),唯一的实际选择是使用像val研这样的工具。
使用val差制分析您的应用程序
您可以使用Massif工具来分析内存。Massif是一个堆分析器,但也可以测量堆栈的大小。
瓦砾-工具=地块-堆栈=是
这将为您提供堆和堆栈内存使用情况。然后将信息存储在文件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详细信息存储在文件中,存储在不同的表中。要充分理解输出,请参阅瓦莱尔手册页面,这似乎非常清楚。
跟踪孩子的选项是:--trace-children=yes
有趣的是,似乎没有“进程的实际内存使用”:https://unix.stackexchange.com/questions/164653/actual-memory-usage-of-a-process。
发布于 2015-11-09 13:07:55
此程序未定义:没有main函数。
在这种情况下,编译器保留不编译任何东西的权利,从而导致零内存占用和内存大小。
https://stackoverflow.com/questions/33609797
复制相似问题