【问题标题】:how to know the memory footprint of my binary executable如何知道我的二进制可执行文件的内存占用
【发布时间】:2014-04-24 01:17:59
【问题描述】:

我想知道是否有办法知道我用 C 语言编写的二进制可执行文件的内存占用情况。

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

【问题讨论】:

  • 你想知道它是静态内存大小还是执行期间的内存使用情况?
  • 在执行过程中是否可行?为什么不

标签: c memory memory-management openwrt


【解决方案1】:

在 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;dec;十六进制;)
  • 你确定它适用于 C 程序吗?我尝试做size path/to/program.c,但收到错误“unkonw format”
  • @Bastienm 不,这仅适用于二进制对象。因此,当您编译 C 源代码时,例如gcc -c path/to/program.c 可以通过size path/to/program.o 获取尺寸。
  • 我刚刚明白我必须将它与二进制文件一起使用抱歉...谢谢!
【解决方案2】:

要了解您在运行时的内存使用情况,在 Linux 系统上,您可以使用valgrindmemcheck 工具。

【讨论】:

    【解决方案3】:

    使用命令size <binary> 获取二进制可执行文件的内存占用。 查看尺寸手册 (man size) 了解更多信息。

    【讨论】:

      【解决方案4】:
      top
      

      和高级的叫

      htop
      

      是监控在linux系统中运行的任何可执行文件的工具

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-09
        • 1970-01-01
        • 2021-07-07
        • 2013-11-23
        • 1970-01-01
        • 2013-12-02
        • 1970-01-01
        • 2017-08-02
        相关资源
        最近更新 更多