• 【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区域的地址空间是否不与任何其他执行区域重叠。

    来源

  • 相关阅读:
    Python str转化成数字
    MySQL之CONCAT()的用法
    MySQL之LIMIT用法
    MySQL中LOCATE用法
    设计模式-模版方法
    设计模式-单例模式
    设计模式-桥接模式
    UML图标含义及记忆方法
    redis-分布式锁-消除竞争条件
    redis-分布式锁-刷新信号量
  • 原文地址:https://www.cnblogs.com/skullboyer/p/15806707.html
Copyright © 2020-2023  润新知