什么是堆栈溢出错误?它可能会以哪种类型的程序/编程语言出现? Web应用程序代码中是否不太可能发生?
最佳答案
In software, a stack overflow occurs when too much memory is used on the call stack. In many programming languages, the call stack contains a limited amount of memory, usually determined at the start of the program.
堆栈是一种数据结构,用于记录程序的子例程在完成执行时应将控制权返回给点的记录。当子例程被调用时,返回地址被压入堆栈,当子例程完成执行时,返回地址将从堆栈中拉出。如果有许多子例程,并且堆栈中没有空间,则会发生堆栈溢出。
此外,堆栈中还打算存储局部变量,因此,如果局部变量太大,则很有可能堆栈没有空间来存储它,如果是这种情况,也会发生堆栈溢出。
Wikipedia包含一个不错的图表,描绘了从另一个名为
DrawLine
的子例程中调用DrawSquare
子例程时的堆栈,希望此图有助于更好地理解堆栈结构。堆栈溢出的主要原因有两个:深度函数递归和堆栈变量太大。由于这些是几乎所有编程语言中的通用术语,因此除了语言的复杂性外,还会发生堆栈溢出。
Guffa贡献:堆栈与垃圾回收没有任何关系。现代应用程序具有较大的堆栈,这使得堆栈溢出的可能性稍有降低,但除此之外没有区别。
关于language-agnostic - 什么是堆栈溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1110138/