如何知道我的二进制可执行文件的内存占用情况

8
我想知道如何获取我用C语言编写的二进制可执行文件的内存占用情况。

关于二进制可执行文件的信息:使用OpenWrt分支(Attitude Adjustment)的工具链进行编译,其架构为x86。


1
你想知道它的静态内存大小还是执行期间的内存使用情况? - Shahbaz
如果在执行期间可能,为什么不呢? - Anis_Stack
4个回答

18
在Linux/Unix系统中,您可以使用size命令来执行此操作,例如在我的Ubuntu系统中。
size /bin/sh
   text    data     bss     dec     hex filename
 102134    1776   11272  115182   1c1ee /bin/sh

由于这是OpenWrt,如果您有不同的架构,例如MIPS或ARM或其他架构,您必须选择相应工具链的size命令。

以下是各个部分的含义:

  • text表示可执行文件的代码大小
  • data是初始化数据段,例如变量,如int v = 17;char name[] = "Tom";
  • bss是未初始化或简单初始化为0的部分,例如int a;double amount;
  • dec是总大小,即102134 + 1776 + 11272 = 115182
  • hex最后也是总大小,以十六进制值表示1c1ee = 115182
但这不包括堆栈或任何动态堆内存。要查看运行时的总体内存使用情况,您必须查看 pstop 输出。

你能详细解释一下每个参数的含义吗?(文本; 数据; BSS; 十进制; 十六进制;) - Anis_Stack
你确定它能与C程序一起工作吗?我尝试执行 size path/to/program.c,但是出现了“未知格式”的错误。 - Bastienm
1
@Bastienm 不,这只适用于二进制对象。因此,当您编译C源代码时,例如gcc -c path/to/program.c,您可以使用size path/to/program.o获取大小。 - Olaf Dietsche
我刚才明白了,我必须使用二进制。抱歉...谢谢! - Bastienm

4

如果您想了解Linux系统运行时的内存使用情况,可以使用valgrindmemcheck工具。


1
使用命令size <binary>获取您的二进制可执行文件的内存占用情况。 有关更多信息,请查看大小手册(man size)。

0
top

还有一个高级的称为

htop

这些工具用于监视在Linux系统中运行的任何可执行文件


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接