- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果这是一个愚蠢的问题,请原谅我,但我担心我不知道“堆栈”是什么。
我知道什么是“堆栈”,并且了解了 FILO/FIFO 缩写词。但是,当人们说“值类型分配在堆栈上,而不是堆上”时,恐怕我并不真正知道这意味着什么。
当我在递归函数中引入逻辑错误时 - 我无法为“堆栈”分配更多内存,并且我的应用程序崩溃了......但我真的不明白它是什么。
我尝试通过 Google 寻找答案,但只找到了有关“堆栈”以及如何使用堆栈的信息。
当我运行 .Net 应用程序时,它是否会创建一个“堆栈实例”来充当“堆栈”?我见过堆栈跟踪,它向我显示代码的执行级别 - 最常见的是当我遇到未处理的异常时......但我记得能够看到的是方法和它们被调用的顺序......不会堆栈还具有堆栈每个步骤范围内的所有变量。
也许我只是很傻 - 但我想我可以想象一种使用递归函数的情况,在这种情况下,可以很方便地从“堆栈”中查看变量的前一个值,但不需要传递它英寸。不知道这是否有意义 - 已经太晚了。但我真的很感激任何人提供的任何信息。
最佳答案
该术语指的是 call stack 。如果您参加低级编程或计算机体系结构/组织类(class),您可能会学到更多有关概念的信息。
每当调用函数时,返回地址(从哪里调用它)以及函数的参数都会被推送到“堆栈”(内存中的堆栈,但不是 C# 堆栈数据结构)您可以在 MSDN 上读到相关内容)。当函数终止时,该地址将从堆栈中弹出,并且控制权将恢复到原来的位置(在弹出的地址处)。与函数调用相关的信息群(局部变量、返回地址、参数等)称为“堆栈帧”。
因此,当您使用递归(并且它陷入无限递归循环)时,您实际上只是用返回地址(和其他数据)填充堆栈,直到没有剩余空间为止。
编辑 - 您提到the heap还。这是存储数据结构的地方(动态内存分配,通过当今大多数语言中的 new
关键字,或 C 中的 malloc
)。例如,在 C/C++ 中,堆上的数据一直存在,直到显式释放为止。这与存储在堆栈上的本地/自动变量形成对比(因此当它们的作用域终止时会被销毁......它们会从堆栈中弹出而不存在)。
关于.net - 'The Stack' 到底是什么,因为它与 .Net 有关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2036421/
我是一名优秀的程序员,十分优秀!