【问题标题】:Difference of Sizes of Various Fields Between Object File and Executable File目标文件和可执行文件之间各个字段的大小差异
【发布时间】:2012-02-29 04:36:03
【问题描述】:

我在 linux 中使用 size 命令获得了以下信息,用于示例 c++ 程序。

text    data     bss     dec     hex   filename
1908     304     152    2364     93c   test
 346       4       1     351     15f   test.o

我读到输出是尺寸; text 是实际代码, bss 包含未初始化的全局变量,而 data 作为已初始化和未初始化段的添加。我的问题是为什么目标文件和可执行文件的大小不同,特别是在文本中,因为源代码在内存中很常见?如果没有全局变量,为什么会显示 bss 的大小?

示例代码文件包含如下:

#include <iostream>

using namespace std;

   int main()
   {
      cout << "Hello World!" << endl ;

      return 0;
   }

谢谢!

【问题讨论】:

    标签: c++ g++ size executable object-files


    【解决方案1】:

    大小不同,因为您的目标文件只包含您的代码。链接文件还包括编译器 C++ 框架(即调用 main 所需的代码)和各种标准库(至少 C 和 C++ 标准库)的链接。

    【讨论】:

    • 谢谢。这就是为什么即使没有全局变量,它也会显示全局变量的大小?因为编译器/链接器插入了信息?
    • 是的。您应该尝试反编译代码以获得更好的主意。值得注意的是,您将拥有一个“cout”和一个“cin”全局...
    猜你喜欢
    • 2021-06-10
    • 1970-01-01
    • 2023-03-19
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 2011-09-01
    相关资源
    最近更新 更多