知识卡片
栈深来自调用链
内容
RAM 不只被全局变量占用,函数调用链、局部变量和中断上下文都会消耗栈空间。发散:最坏情况下的调用深度才决定栈是否安全,平均路径漂亮并不能防止现场溢出。
参考来源
- 位置:《嵌入式系统设计与实践》第8章《事半功倍》"栈中的函数链"相关小节(源文件:_epub-src/OEBPS/text00119.html附近)
- 结论依据:原文明确"如果有一个函数链,那么为了给最后调用的函数让路,最先调用的函数中的局部变量和参数将存入栈中……随着增加对寄存器的使用,每个栈框架会更小",说明栈占用取决于函数调用链深度而非单纯全局变量大小。
- 原始内容:处理器内部只有少数几个寄存器可用,因此除此之外的其他变量都存放在栈中……因此,如果有一个函数链,那么为了给最后调用的函数让路,最先调用的函数中的局部变量和参数将存入栈中……如果可以对设计稍做调整,让函数调用稍微平面化一点(减少调用层次),那么栈空间要小很多。