【问题标题】:storage classes in C language [duplicate]C语言中的存储类[重复]
【发布时间】:2015-12-14 07:18:50
【问题描述】:

在这个程序中,我没有声明任何变量仍然显示数据段 (BSS) 大小为 8 个字节。为什么?

achul@achul:~/chennai/misclaneous$ vi memory.c
#include<stdio.h>
main()
{
}
achul@achul:~/chennai/misclaneous$ cc memory.c -o mem
achul@achul:~/chennai/misclaneous$ size mem
   text    data     bss     dec     hex filename
   1056     252       8    1316     524 mem

这里我没有使用任何全局变量,因为 BSS 是为全局变量保留的,只有任何人都可以使用?

【问题讨论】:

  • 发布的代码不是您编译的唯一代码。启动代码也已链接。
  • 是的,使用-c 选项编译以获得与您的代码相对应的对象.o
  • 我看不出这与存储类说明符有什么关系。这是一个正常的可执行文件/对象问题。
  • #include int i; main() { } /* cc -c memory.c achul@achul:~/chennai/misclaneous$ size memory.o text data bss dec hex 文件名 61 0 0 61 3d memory.o 为什么未初始化的 var 不进入 BSS? */

标签: c


【解决方案1】:

在普通(托管)环境中,.c 文件并编译为目标文件,而此目标文件与标准 clib 链接。并且该库包含一个由系统本地加载的模块(通常称为crt0.o),可选地解码命令行并调用函数main传递argcargvenvironment,并且通常还设置一些全局变量。

这个 crt0 模块确实包含全局变量。

【讨论】:

    【解决方案2】:

    这里有几个输出

    下面是一个编译的对象,根本没有链接,纯粹是上面的简单程序,没有显示的全局内容。

    size   t1.o 
       text      data     bss     dec     hex filename
         62         0       0      62      3e t1.o
    
    size --format=SysV t1.o 
    t1.o  :
    section           size   addr
    .text                6      0
    .data                0      0
    .bss                 0      0
    .comment            42      0
    .note.GNU-stack      0      0
    .eh_frame           56      0
    Total              104
    

    下面是一个完整的可执行文件,包含启动代码和其他支持的东西。

    size a.out 
       text      data     bss     dec     hex filename
       1115       552       8    1675     68b a.out
    
     size --format=SysV a.out 
    a.out  :
    section              size      addr
    .interp                28   4194872
    .note.ABI-tag          32   4194900
    .note.gnu.build-id     36   4194932
    .gnu.hash              28   4194968
    .dynsym                72   4195000
    .dynstr                56   4195072
    .gnu.version            6   4195128
    .gnu.version_r         32   4195136
    .rela.dyn              24   4195168
    .rela.plt              48   4195192
    .init                  26   4195240
    .plt                   48   4195280
    .text                 370   4195328
    .fini                   9   4195700
    .rodata                 4   4195712
    .eh_frame_hdr          52   4195716
    .eh_frame             244   4195768
    .init_array             8   6295056
    .fini_array             8   6295064
    .jcr                    8   6295072
    .dynamic              464   6295080
    .got                    8   6295544
    .got.plt               40   6295552
    .data                  16   6295592
    .bss                    8   6295608
    .comment               77         0
    Total                1752
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 2012-11-23
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 2018-03-10
      相关资源
      最近更新 更多