三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Cortex-M3:为什么 EMPTY 区域常用于堆栈?

Cortex-M3:为什么 EMPTY 区域常用于堆栈?

难度:★
本文首发于我的嵌入式技术号「OneChan讲Soc嵌入式」,未经授权禁止转载。


打开一个典型的 Cortex-M3 分散加载文件,除了ER_IROM1RW_IRAM1,你大概率还会看到这样一个区域:

STACK 0x20010000 EMPTY 0x00000400 { }

或者更简洁的:

STACK 0x20010000 EMPTY 0x400 { }

EMPTY。空的。

为什么要在宝贵的 RAM 里,划出一块“空”的区域?而且这个区域,经常被命名为STACKHEAP

今天这篇文章,就来拆开EMPTY的真正含义。它的背后,藏着栈和堆这两个运行时最核心的内存结构,以及链接器对它们“特殊对待”的全部逻辑。


一、EMPTY 是什么?它和“空”有什么关系?

EMPTY是 ARM 链接器的一个执行域属性。它的定义是:

在执行地址空间里,预留一段指定大小的区域,但这段区域不属于任何加载域,不包含任何输入段,不占用任何 Flash 空间。

换句话说,EMPTY是一块“

← 返回列表