首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C程序的内存剖析

C程序的内存剖析
EN

Stack Overflow用户
提问于 2015-11-09 13:06:35
回答 2查看 5.2K关注 0票数 7

需要对我的C应用程序进行内存分析。

它应该包括内存大小和内存大小..。

例如,如果我的应用程序如下所示。

代码语言:javascript
复制
#include <stdio.h>

int global = 10; /* initialized global variable */

int test_code(void)
{
    static int i = 100; /* Initialized static variable*/
    return 0;
}

输出:

代码语言:javascript
复制
[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字节

需要专家的建议

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-09 14:18:24

查找对象的内存大小

如果您想知道磁盘上程序的大小以及RAM中文本和数据的大小,那么在Linux/Unix上可以使用size命令:

代码语言:javascript
复制
$> size /bin/cat
text       data     bss     dec     hex filename
43422      1720    2472   47614    b9fe /bin/cat

大小的输出是对象文件的不同部分的内存大小:

  • 文本:(代码段)可执行指令
  • data:(数据段)初始化的全局变量
  • bss:(由符号启动的块)静态分配变量

最后两列,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.??

文件中的第一个输出是运行期间内存使用情况的一个很好的图表。

代码语言:javascript
复制
--------------------------------------------------------------------------------
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

票数 5
EN

Stack Overflow用户

发布于 2015-11-09 13:07:55

此程序未定义:没有main函数。

在这种情况下,编译器保留不编译任何东西的权利,从而导致零内存占用和内存大小。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33609797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档