【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 区域在运行时不会初始化为零。
如果地址是相对 (+偏移量
) 形式,并且长度为负,则链接器将生成错误。
下图显示了此示例的图示表示形式。
在此示例中,链接器生成以下符号:
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
区域的地址空间是否不与任何其他执行区域重叠。
【来源】
再牛逼的梦想也架不住傻逼似的坚持