全局/静态变量初始化为0放在bss段还是data段

2013-6-4上午去面试,被鄙视了,技术公司大牛的风范,好犀利!不过我这题应该是蒙对了。。

 

如:static unsigned char s_test = 0;

这个静态变量是放到bss段还是data段呢,以下是我编译的结果:(全局变量也是如此)

 

1.看这样子,即使是初始化了,但是初始化的是0,还是放在bss段的

2.这里还有一个问题,即使是全局定义了一个变量,若后面程序不使用的话,还是默认不分配这个变量空间的.

(至少说ARM的ADS编译器是如此,是否具有普遍性,暂时还不知道 -  - ! )

3.注:

可执行程序包括BSS段、数据段代码段(也称文本段)。

BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量静态变量的一块内存区域。特点是:可读写的,在程序执行之前BSS段会自动清0。所以,未初始的全局变量在程序执行之前已经成0了。

注意和数据段的区别,BSS存放的是未初始化的全局变量静态变量,数据段存放的是初始化后的全局变量和静态变量。

UNIX下可使用size命令查看可执行文件的段大小信息。如size a.out。

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值