【ARM】为堆和栈保留空的内存块

此示例演示如何使用分散加载描述为堆栈和堆保留和清空内存块。它还显示链接器生成的相关符号。

在以下示例中,执行区域定义STACK 0x800000 EMPTY -0x10000定义了一个名为STACK 的区域。该区域从地址0x7F0000开始,到地址0x800000结束:

LR_1 0x80000                          ; load region starts at 0x80000
{
    STACK 0x800000 EMPTY -0x10000     ; region ends at 0x800000 because of the
                                      ; negative length. The start of the region
                                      ; is calculated using the length.
    {
                                      ; Empty region for placing the stack
    }

    HEAP +0 EMPTY 0x10000             ; region starts at the end of previous
                                      ; region. End of region calculated using
                                      ; positive length
    {
                                      ; Empty region for placing the heap
    }
    ...                               ; 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属性。

链接器检查用于EMPTY区域的地址空间是否不与任何其他执行区域重叠。

 

来源

posted @ 2022-01-15 12:23  壹点灵异  阅读(103)  评论(0编辑  收藏  举报