知识卡片

栈深来自调用链

普通读书笔记卡 · 1800.d

内容

RAM 不只被全局变量占用,函数调用链、局部变量和中断上下文都会消耗栈空间。发散:最坏情况下的调用深度才决定栈是否安全,平均路径漂亮并不能防止现场溢出。

参考来源

- 位置:《嵌入式系统设计与实践》第8章《事半功倍》"栈中的函数链"相关小节(源文件:_epub-src/OEBPS/text00119.html附近) - 结论依据:原文明确"如果有一个函数链,那么为了给最后调用的函数让路,最先调用的函数中的局部变量和参数将存入栈中……随着增加对寄存器的使用,每个栈框架会更小",说明栈占用取决于函数调用链深度而非单纯全局变量大小。 - 原始内容:处理器内部只有少数几个寄存器可用,因此除此之外的其他变量都存放在栈中……因此,如果有一个函数链,那么为了给最后调用的函数让路,最先调用的函数中的局部变量和参数将存入栈中……如果可以对设计稍做调整,让函数调用稍微平面化一点(减少调用层次),那么栈空间要小很多。