什么是堆栈溢出错误?它可能出现在什么类型的程序/编程语言中?它不太可能出现在 Web 应用程序代码中吗?
From 维基百科 http://en.wikipedia.org/wiki/Stack_overflow:
在软件中,会发生堆栈溢出
当内存使用过多时
调用堆栈。在很多编程中
语言中,调用堆栈包含
通常内存量有限
开始时确定的
程序。
堆栈是一种数据结构,用于记录程序的子例程在完成执行时应返回控制权的点。返回地址是pushed当子程序被调用时,在堆栈中,当子程序完成执行时,返回地址是pulled从堆栈中。如果有很多子程序并且堆栈中没有空间,则会发生堆栈溢出。
另外,堆栈旨在存储局部变量,因此如果局部变量太大,堆栈很可能没有空间来存储它,如果是这种情况,也会发生堆栈溢出。
维基百科有一个很好的图表,描绘了当一个DrawLine
子例程从另一个名为的子例程调用DrawSquare
,希望这张图能帮助大家更好的理解栈结构。
造成堆栈溢出的主要原因有两个:深度函数递归 and 堆栈变量太大。由于这些是几乎所有编程语言中的常用术语,除了语言的复杂性之外,堆栈溢出也可能发生。
Guffa https://stackoverflow.com/users/69083/guffa贡献:堆栈与垃圾收集没有任何关系。现代应用程序具有更大的堆栈,这使得堆栈溢出的可能性稍微降低,但除此之外没有什么区别。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)