c语言中的各种变量是如何存储的(-)

                                                                        众所周知,c语言中有全局变量,局部变量,常量数据。。。

 

其中,全局变量又有初始化和不初始化。

int array[1024];


int main()

{
 return 0;

}

lyh@debian:~/test$ gcc -g bss.c -o bss

lyh@debian:~/test$ objdump -h bss | grep bss
bss:    
file format elf32-i386
24 .bss      00001020  08049580  08049580  00000568  2**5

lyh@debian:~/test$ ls -l
bss
-rwxr-xr-x 1 lyh lyh 5395  4月 26 18:29 bss

(bss段用来存放未初始化的全局变量)
上面代码中全局变量未初始化,全局变量array 4k的数据存放在bss中。


int array[1024] = {1};

int main()

{

 return 0;

}

lyh@debian:~/test$ gcc -g data.c -o data

lyh@debian:~/test$ objdump -h data | grep\\.data
 
23 .data         00001020  08049560  08049560  00000560  2**5

lyh@debian:~/test$ ls -l data
-rwxr-xr-x 1 lyh lyh 9520  4月 26 18:35 data

(.data段用来存放初始化了的全局变量)
上面代码中全局变量初始化了,全局变量array 4k的数据存放在.data中。发现data文件的大小为9520,也就是说初始化了的全局变量的大小会加入到文件大小中,同时又会占内存。

所以我们在定义全局变量的时候,要考虑要不要初始化,能不初始化就不初始化,毕竟会增大文件的大小。
如果我们把全局变量初始化为0时,会发生什么呢?


int array[1024] = {0};

int main()

{
 return 0;

}

lyh@debian:~/test$ objdump -h data | grep\\.data
23 .data         00000008  08049560  08049560  00000560  2**2

当我们查看.data时发现初始化为0的全局变量array竟然不是存储在.data段中。

lyh@debian:~/test$ objdump -h data | grep bss
 
24 .bss          00001020  08049580  08049580  00000568  2**5

查看bss段,发现array存放在该段里
编译器会把该全局变量当作没初始化处理,即把全局变量存到bss段中。所以可以得出bss段是用来存放未初始化或者初始化为0的全局变量。

-------本人菜鸟一只,如有错误,大牛们指出^_^

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值