为什么bss段不占空间?

存储这些变量属性不占空间吗?

请先 登录 后评论

3 个回答

"不才、 - 软件

你好,

韦老师的回答在下面的链接中,bss段是占用空间的,就像你说的,用来存储变量的属性。

https://zhuanlan.zhihu.com/p/28659560

请先 登录 后评论
hceng

参考这个示例:

hceng@book-virtual-machine:~/temp/test$ echo "char array[1024*1024*64] = {'A'}; int main() {return 0;}" | gcc -x c - -o data

hceng@book-virtual-machine:~/temp/test$  ls -lh data

-rwxrwxr-x 1 hceng hceng 65M 5月  13 18:58 data

hceng@book-virtual-machine:~/temp/test$ echo "char array[1024*1024*64]; int main() {return 0;}" | gcc -x c - -o bss

hceng@book-virtual-machine:~/temp/test$ ls -lh bss

-rwxrwxr-x 1 hceng hceng 8.0K 5月  13 18:58 bss



第一个例子,array数组由于有初始值(不为零),那array变量在.data段,占用文件空间,所以整个文件一共有65M。


第二个例子,array数组没有初始化,那array变量在.bss段,不占文件空间,所以整个文件才8K。


BBS是说,放到该段上的变量值是零(如果变量是数类型(char, short, int, long, longlong),那它的值是0,如果是指针,它的值也是0,如果是结构体,那它每个成员值都是0,如果是数组,每个元素值都是0)。 因为它的值是零,这些值就不用放到文件里面,反正都是零,在程序加载时,给他找块内存,清零之后,给他们用就是了。


Linux环境下的C语言里,那些变量放到BBS段里面呢,主要是两类:初始值为零的,没有赋初始值的。


再次说明,变量在BBS段,是说明它的值内存是0,所以这些内存不保存在文件中。但是……但是……变量就是一种符号,它的描述信息,该有的ELF描述信息(比如地址,类型……)还是要写到ELF上的。

请先 登录 后评论
尘封sunshine

bss段是不会出现在程序下载文件(*.bin *.hex)中

请先 登录 后评论
  • 2 关注
  • 0 收藏,1436 浏览
  • 暮风 提出于 2020-05-13 15:56

相似问题