ZHCUAU3J January 2018 – March 2024
减少应用对存储器需求的一种方式是将存储器的一部分空间用于多种用途。用户可以首先使用存储器中的一部分空间进行系统初始化和启动。该阶段完成后,相同的存储器空间可改变用途,作为一组未初始化的数据变量或一个堆。若要实施此方案,请使用以下 UNION 语句的变化形式,它允许初始化一个段,而使其他段保留未初始化状态。
通常,一个 union 中经过初始化的段(具有原始数据,例如 .text)必须拥有其单独指定的负载分配。但一个 union 中有且只有一个初始化的段可分配至该 union 的运行地址。在 UNION 语句中列出,但没有负载分配,该段就会使用该 union 的运行地址作为它自己的负载地址。例如:
UNION run = FAST_MEM
{ .cinit .bss }
在本例中,.cinit 段是初始化的段。它会在 union 的运行地址被加载到 FAST_MEM 中。相反,.bss 是一个未初始化的段。它的运行地址也是该 union 的运行地址。