ARM 為堆和棧保留空的記憶體塊

2022-09-16 04:36:13 字數 1139 閱讀 3915

此示例演示如何使用分散載入描述為堆疊和堆保留和清空記憶體塊。它還顯示鏈結器生成的相關符號。

在以下示例中,執行區域定義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語言程式基本上都要用到。但對於很多的初學著來說,堆疊是乙個很模糊的概念。堆疊 一種資料結構 乙個在程式執行時用於存放的地方,這可能是很多初學者的認識,因為我曾經就是這麼想的和組合語言中的堆疊一詞混為一談。我身邊的一些程式設計的朋友以及在網上看...