我在 threadx 的移植中看到,在每个线程堆栈的顶部都有保留的未初始化字节,然后是 16 个零字节,然后堆栈才真正开始。
零字节称为backtrace。在 arm 端口,它是 4 个字节未初始化和 4 个零(例如这里),而在 ARC 端口,两者都是 16 字节大小(例如这里)。
更重要的一件事是,如果未定义TX_DISABLE_STACK_FILLING,则未初始化的字节将初始化为 0xef 。
我的问题是:
- 为什么 ARC 移植和 ARM 移植之间存在差异?
- 为什么这些字节存在?算法中是否有使用这些字节的跟踪工具或其他东西,或者它们只是为了在内存中“手动”查看该内存没有改变?