2013-10-23 107 views
3

在我的链接脚本的起始地址和大小如下:其中是存储在内存段中的全局变量和静态变量?

code start:90400000 
code end: 90a00000 
data start:90b00000, size 3MB 
bss start: 91200000, size 1MB 

但是当我声明一个全局变量,其地址为:910bead0 它应该驻留在.bss部分,但它是某处其他,我甚至没有在链接器脚本中指定。 谁能告诉我发生了什么事?

+2

在链接期间生成映射文件。 –

+0

注意:'0x910bead0 - 0x90b00000 == 0x5BEAD0 == 6023888'大约6MB。 –

回答

3

你并不表明什么系统,等等,你正在使用,但传统:初始化的全局数据data去;未初始化的全局数据进入bss(将初始化为0)。当你写类似:

int x = 0; 

系统有所不同:一些认识到初始化是等同于零初始化(即发生了什么,当你不指定初始化),并把它放在bss;其他人只会看到有一个初始化的事实,并将其放入data

+0

'你没有指出你使用的是什么系统等, - >使用codesourcery在cortex A15上创建ELF。我知道内存分割,但正如你所看到的,地址既不驻留在数据中也不在bss – ritesh

+0

@ritesh如果数据不符合你给的大小,链接器会做什么?例如,如果它有超过3MB的数据段? –

+0

大小3MB不是硬编码其动态的,在链接器中我包含了所有的输入.data,并且大小是从它计算出来的,一旦数据大小被计算出来。它如何改变? – ritesh