ELF格式文件的问题
-
- 帖子: 27
- 注册时间: 2009-08-04 13:53
ELF格式文件的问题
关于ELF格式文件中,BSS文件是不分配空间的,要等到运行时才分配空间。我想问,比如说局部为初始化静态变量 int static local_var, 它在编译生成目标文件后事放在哪个section的??难道不是在data section吗? 放在bss section中的话为什么又不分配空间给它,不分配空间怎么可能能放置的下啊??请哪位高手帮忙解答,thanks
-
- 帖子: 27
- 注册时间: 2009-08-04 13:53
Re: ELF格式文件的问题
哪位兄弟帮忙,急~
- command
- 帖子: 306
- 注册时间: 2007-10-14 0:50
- 来自: GUCAS
Re: ELF格式文件的问题
bss不占用文件的空间,只是未初始化的数据用来占内存地址空间的,未初始化的变量在生成的目标文件中不占用空间,只有在运行的时候才分配内存(也就是为bss分配空间)。
你上面的local_var就放在bss section中,不分配空间那时因为分配空间也没用,分配的空间里放什么数据呢?所以像这种未初始化的数据在程序运行时才分配空间,此时按照各种系统的规定初始化这些变量。程序在用这些变量之前需要为它们再次初始化(你不可能用没有初始化的变量,因为不知道系统把它们初始化成什么数据了),此时就可以在固定的内存地址引用该变量了。
你上面的local_var就放在bss section中,不分配空间那时因为分配空间也没用,分配的空间里放什么数据呢?所以像这种未初始化的数据在程序运行时才分配空间,此时按照各种系统的规定初始化这些变量。程序在用这些变量之前需要为它们再次初始化(你不可能用没有初始化的变量,因为不知道系统把它们初始化成什么数据了),此时就可以在固定的内存地址引用该变量了。
OS: Debian GNU/Linux
Version: lenny
Kernel: 2.6.36
Xorg: 1.4.2
CPU: Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
HD: 320G SATA
Memory: 2G DDRIII
Graphics:Mobility Radeon HD 3450
Version: lenny
Kernel: 2.6.36
Xorg: 1.4.2
CPU: Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
HD: 320G SATA
Memory: 2G DDRIII
Graphics:Mobility Radeon HD 3450
-
- 帖子: 27
- 注册时间: 2009-08-04 13:53
Re: ELF格式文件的问题
那就是说,bss section其实是没有实际内容的,只是通过sysbol table 等section来“描述”它确实存在而已了?
- command
- 帖子: 306
- 注册时间: 2007-10-14 0:50
- 来自: GUCAS
Re: ELF格式文件的问题
bss没有实际内容,符号表存储了程序定义的变量,未初始化的变量在程序被载入内存时在bss分配的内存空间中初始化。bss也是一个section,在elf的section header table结构中定义它的位置。
OS: Debian GNU/Linux
Version: lenny
Kernel: 2.6.36
Xorg: 1.4.2
CPU: Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
HD: 320G SATA
Memory: 2G DDRIII
Graphics:Mobility Radeon HD 3450
Version: lenny
Kernel: 2.6.36
Xorg: 1.4.2
CPU: Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
HD: 320G SATA
Memory: 2G DDRIII
Graphics:Mobility Radeon HD 3450
-
- 帖子: 27
- 注册时间: 2009-08-04 13:53
Re: ELF格式文件的问题
thank you. 我明白了。command 写了:bss没有实际内容,符号表存储了程序定义的变量,未初始化的变量在程序被载入内存时在bss分配的内存空间中初始化。bss也是一个section,在elf的section header table结构中定义它的位置。