【问题标题】:What is the difference between stack and call stack栈和调用栈有什么区别
【发布时间】:2019-07-29 09:07:30
【问题描述】:

我只是想问你堆栈和调用堆栈之间的区别,如果有的话。 (JavaScript) 我知道堆栈是“内存的一部分”,调用堆栈基本上是调用函数。我对吗?

感谢您的回答。

【问题讨论】:

  • 两者没有共同之处。嗯,有点 - 调用 stack 是使用 stack 实现的,但这两个概念完全不同。堆栈是一种数据结构,而调用堆栈是程序在调用函数时生成的。
  • 堆栈和调用堆栈是根本不同的东西,彼此没有直接关系。调用堆栈是按调用顺序排列的调用“堆栈”。因此,如果您调用一个函数,调用堆栈将包含您调用的函数所调用的每个函数。而在内存分配方面,堆栈只包含特定于方法的短期值,以及对堆中从方法中引用的其他对象的引用。

标签: javascript stack


【解决方案1】:

一般来说,栈是一种“后进先出”的数据结构。

如果有帮助,您可以想一想炉子旁边的一堆薄煎饼:新鲜煮熟的薄煎饼被扔在堆栈顶部,当某人的盘子需要薄煎饼时,他们会拿上面的任何一个(所以最后一个进入堆栈的是第一个被取出的。)


您可以在自己的代码中创建一个堆栈——这可能只是一个数组,您只使用.push.pop 方法来管理其内容。例如,您可以使用堆栈(被调用函数)和循环来模拟递归。

单个内存线程通常使用一堆函数。当一个函数被调用时,它会进入堆栈,如果它反过来导致更多的函数,它们会按照它们被调用的顺序放在顶部。当然,这些函数可以将更多函数添加到堆栈中。每当当前(顶部)函数完成而不再调用任何函数时,它就会离开堆栈,并且它声明的变量通常变得不可用。

堆栈大小会随着时间的推移而波动,直到最终堆栈为空,此时大概程序已完成(或者——可怕!——超出了堆栈的容量,程序崩溃了。)


您可以在 this wikipedia article 中找到有关调用堆栈的更多提示,包括“调用堆栈用于多个相关目的,但拥有一个的主要原因是跟踪每个调用堆栈的点”活动子程序在完成执行后应该返回控制权。”

【讨论】:

    猜你喜欢
    • 2021-05-10
    • 2011-11-20
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 2016-01-19
    • 2015-01-15
    相关资源
    最近更新 更多