此示例演示如何使用分散載入描述為堆疊和堆保留和清空記憶體塊。它還顯示鏈結器生成的相關符號。
在以下示例中,執行區域定義stack 0x800000 empty -0x10000
定義了乙個名為stack 的區域
。該區域從位址0x7f0000
開始,到位址0x800000
結束:
lr_1 0x80000 ; load region starts at 0x80000
heap +0 empty 0x10000 ; region starts at the end of previous
; region. end of region calculated using
; positive length
... ; rest of scatter-loading description
}
為empty
執行區域建立的虛擬 zi 區域在執行時不會初始化為零。
如果位址是相對 (+偏移量
) 形式,並且長度為負,則鏈結器將生成錯誤。
下圖顯示了此示例的圖示表示形式。
圖 1.為堆疊預留區域
image$$stack$$zi$$base = 0x7f0000
image$$stack$$zi$$limit = 0x800000
image$$stack$$zi$$length = 0x10000
image$$heap$$zi$$base = 0x800000
image$$heap$$zi$$limit = 0x810000
image$$heap$$zi$$length = 0x10000
empty
屬性僅適用於執行區域。鏈結器將生成警告並忽略載入區域定義中使用的empty
屬性。
堆記憶體和棧記憶體的管理
1 堆記憶體 堆記憶體是由程式設計師手工管理的,但它的申請是需要借助標準庫函式。在大小上,理論上是物理記憶體的大小。關於堆記憶體的資料儲存是靠程式設計師來管理的。由於是由程式設計師管理的,程式設計師的錯誤操作也導致記憶體的洩露和記憶體碎片的問題。關於堆記憶體的標準庫函式 stdlib.h mallo...
記憶體堆和棧的區別
在計算機領域,堆疊是乙個不容忽視的概念,我們編寫的c語言程式基本上都要用到。但對於很多的初學著來說,堆疊是乙個很模糊的概念。堆疊 一種資料結構 乙個在程式執行時用於存放的地方,這可能是很多初學者的認識,因為我曾經就是這麼想的和組合語言中的堆疊一詞混為一談。我身邊的一些程式設計的朋友以及在網上看帖遇到...
記憶體堆和棧的區別
原文 在計算機領域,堆疊是乙個不容忽視的概念,我們編寫的c語言程式基本上都要用到。但對於很多的初學著來說,堆疊是乙個很模糊的概念。堆疊 一種資料結構 乙個在程式執行時用於存放的地方,這可能是很多初學者的認識,因為我曾經就是這麼想的和組合語言中的堆疊一詞混為一談。我身邊的一些程式設計的朋友以及在網上看...