如果这是一个愚蠢的问题,请原谅我,但我担心我不知道'堆栈'是什么.
我知道'堆栈'是什么,我已经学会了FILO/FIFO的首字母缩略词.但是当人们说'价值类型被分配在堆栈而不是堆上'时,我恐怕我真的不知道这意味着什么.
当我将一个逻辑错误引入递归函数时 - 我无法再为"堆栈"分配更多内存而我的应用程序崩溃了....但我真的不知道它是什么.
我试图谷歌寻求答案,但只找到关于'堆栈'的信息以及如何使用它.
当我运行.Net应用程序时 - 是否会创建一个"堆栈实例"来充当"堆栈"?我已经看到Stack跟踪向我展示了代码的执行级别 - 最常见的是当我遇到一个无法处理的异常时...但我记得能够看到的是方法和它们被调用的顺序......不会堆栈的每个步骤的范围内也包含所有变量.
也许我只是愚蠢 - 但我认为我可以想象一个具有递归函数的情况,它可以方便地查看变量的先前值 - 来自"堆栈"但不需要传递它.
Dunno,如果这有任何意义 - 这是非常晚.但我真的很感激任何人的信息.
Sap*_*pph 18
该术语指的是调用堆栈.您可以了解有关低级编程或计算机体系结构/组织课程中的概念的更多信息,您可以选择一个.
每当调用一个函数时,返回地址(它被调用的地方)以及函数的参数都被推送到"堆栈"(内存中的堆栈,但不是,不是你的C#堆栈数据结构) d阅读有关MSDN的信息).当函数终止时,地址将从堆栈中弹出,控件将恢复原来的位置(在弹出的地址处).与函数调用有关的信息(局部变量,返回地址,参数等)称为"堆栈帧".
因此,当您使用递归(并且它被无限递归循环捕获)时,您实际上只是用返回地址(和其他数据)填充堆栈,直到没有剩余空间.
编辑 - 你也提到了堆.这是存储数据结构的地方(动态内存分配,现在通过new大多数语言中的关键字,或malloc在C中).例如,在C/C++中,堆上的数据一直存在,直到它被显式释放.这与存储在堆栈中的本地/自动变量形成对比(因此当它们的作用域终止时会被销毁......它们会从堆栈中弹出而不存在).