(求助)调用栈、执行栈是否是一个意思

学习和尚敲代码
  • 5
新手上路,请多包涵

看到网上的文章说这两个东西含糊其辞,或者说这两个本身是一个东西,我理解的执行栈是函数执行时创建执行上下文存储的地方,调用栈是什么?存储函数体本身吗?

回复
阅读 508
2 个回答
✓ 已被采纳

很可能是从 execution stack、 call stack 这些词硬翻译过来的,是一个意思。

你说的栈指的是进程内存空间模型里的栈,是函数执行时的上下文没错。

而一般比较口语化的交流里说的调用栈一般指的是函数之间的调用关系形成的栈,比如调试程序的时候我们说这个调用栈走到某个函数,一般说的就是下面这样的栈

panic: call stack reach here

goroutine 1 [running]:
main.c(...)
        C:/Users/weakptr/repos/play/main.go:16
main.b(...)
        C:/Users/weakptr/repos/play/main.go:12
main.a(...)
        C:/Users/weakptr/repos/play/main.go:8
main.main()
        C:/Users/weakptr/repos/play/main.go:4 +0x45
exit status 2

可以看到函数按调用顺序依次入栈。这个栈本质是进程内存模型里栈的一个用于特定用途、用户友好的表示形式。

如果你想看严肃的术语定义的话看内存模型的栈,如果只是困惑于比较口语化的“调用栈”含义,那你可以认为作者上下文没有相关的内容的话,就没特别的含义,单纯是指上面例子所示的函数调用关系。

都是一个意思。是解释器跟踪函数执行流的一种机制,存储记录函数调用过程的数据结构。

宣传栏