【发布时间】:2011-01-03 10:22:35
【问题描述】:
如果这是一个愚蠢的问题,请原谅我,但恐怕我不知道“堆栈”是什么。
我知道“堆栈”是什么,并且已经了解了 FILO/FIFO 的首字母缩略词。但是当人们说“值类型分配在堆栈上,而不是堆上”之类的话时,恐怕我真的不知道这意味着什么。
当我将逻辑错误引入递归函数时 - 我无法为“堆栈”分配更多内存并且我的应用程序崩溃....但我真的不明白它是什么。
我尝试在 Google 上寻求答案,但只找到关于“堆栈”以及如何使用堆栈的信息。
当我运行 .Net 应用程序时,它会创建一个“堆栈实例”来充当“堆栈”吗?我已经看到了向我显示代码执行级别的堆栈跟踪——最常见的是当我遇到一个未经处理的异常时……但我记得能看到的只是方法和它们被调用的顺序……不会堆栈还包含堆栈每个步骤的所有变量。
也许我只是很傻——但我想我可以想象一个递归函数的情况,在这种情况下,从“堆栈”中查看变量的先前值会很方便,但不需要传递它在。
不知道这是否有任何意义 - 现在已经很晚了。但我非常感谢任何人提供的任何信息。
【问题讨论】:
-
当你不能分配更多内存时,我猜这是由于无限递归造成的,这意味着在某些时候,计算机没有足够的内存来计算递归。
-
短语“A value type is assigned on the stack”并不完全准确。请参阅此处了解更多信息:stackoverflow.com/questions/1130468/…
-
顺便说一句,对于“堆与堆栈”,这里是一个简短的摘要:ee.hawaii.edu/~tep/EE160/Book/chap14/subsection2.1.1.8.html