【问题标题】:executable size compiled by gccgcc 编译的可执行文件大小
【发布时间】:2016-02-08 05:56:25
【问题描述】:

您好专家请回答我的以下问题。 对于二进制文件'test'的大小,我在linux fedora中使用了以下命令并由gcc编译器编译。

$ll -h test

-rwxrwxr-x. 1 user user 4.3M Feb  8 11:17 test

$size test

text       data     bss     dec     hex filename

891714   244788   26664 1163166  11bf9e test

我的问题是知道可执行文件“test”大小的正确命令是什么?为什么两个命令显示不同的结果?

【问题讨论】:

    标签: gcc filesize


    【解决方案1】:

    ls 程序为您提供文件大小 4.3M(实际上是 4.5M,因为 -h 使用了错误的前缀……但这无关紧要)。

    sizes 程序给出了节的大小。并非所有部分都包括在内,这就是它较小的原因。您的程序可能包含调试信息,sizes 没有打印出来。

    【讨论】:

    • 我认为您的意思是 size 程序,而不是 sizes
    • 是的,它是用 -g 标志编译的。不带 -g 选项编译后,ls -l 命令显示可执行文件的大小为 1499004,'size' 命令显示为 1163166,但还是有区别。我有一块只有 2MB RAM 的硬件板,这意味着我不能加载使用 -g 选项编译的可执行文件,它显示可执行文件的大小为 4.3MB?
    • @user3899508:听起来你想要strip。但可执行文件可能很大的原因有很多。
    【解决方案2】:

    您的文件test 可能包含调试信息,size 不会报告。 ll -h 更准确地获取实际文件大小,但 -h 选项为了便于阅读而将其缩写。您可以使用ls -l (ll) 或stat 获得确切的文件大小。

    阅读sizeobjdumpreadelf 的文档以了解更多信息。

    【讨论】:

      【解决方案3】:

      运行以下命令:

      size .\test.exe
      

      输出 ::

      text    data     bss     dec     hex filename   
       9400    1576    1004   11980    2ecc .\test.exe
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-06
        • 1970-01-01
        相关资源
        最近更新 更多