我有一个关于调用堆栈行为的基本问题。我想知道在另一个函数结束时调用函数时系统如何管理调用堆栈内存。
例如:
无效……
应该像这张照片: 内存堆栈
的确是呼唤 functionTwo() 从 functionOne() 并 functionThree() 从 functionTwo() 可以在经过一些特定的调整后生成跳转,以便考虑调用者的参数和局部变量(你能做什么 堆栈清理 )。这就是所谓的 尾调用优化 。它们也可以内联生成,被调用函数的代码成为调用函数的一部分。
functionTwo()
functionOne()
functionThree()
C编译器是执行尾调用优化,内联生成还是一些更高级的技巧是实现质量问题。这样做可以提高代码速度,减少堆栈使用,但由于调用堆栈可能会使跟踪混乱,因此调试更加困难。
标准没有对此提出任何要求,编译器必须生成代码 仿佛 通话正常进行。