2013-10-23 108 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