language-agnostic - 什么是堆栈溢出?

标签 language-agnostic stack stack-overflow

什么是堆栈溢出错误?它可能会以哪种类型的程序/编程语言出现? Web应用程序代码中是否不太可能发生?

最佳答案

Wikipedia:

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/

相关文章:

PHP 不处理堆栈溢出?

language-agnostic - 学生项目 : do they influence employment prospects?

language-agnostic - 是否有一个应该设置传递对象的属性的方法的命名约定

arrays - 计算数组中的索引有助于算法

java - 字符串相等,但 if 语句不触发

java - Stackoverflow 与 Quicksort Java 实现

string - 为什么最长公共(public)子串不是词干提取算法的解决方案?

stack - 堆栈和队列之间的基本区别是什么?

C - 使用 _int16 时出现异常

java - 使用 joda-time new period(long) 时出现 StackOverflowError