例如,当我们调用一个递归函数时,连续的调用将被存储在堆栈中。然而,如果由于错误导致它无限制地继续下去,错误就会是“分段错误”(在GCC上看到)。
这难道不应该是“堆栈溢出”吗?那么两者之间的基本区别是什么?
顺便说一句,解释比维基百科链接更有帮助(经过搜索,但没有特定查询的答案)。
这难道不应该是“堆栈溢出”吗?那么两者之间的基本区别是什么?
顺便说一句,解释比维基百科链接更有帮助(经过搜索,但没有特定查询的答案)。
堆栈溢出是导致分段错误的原因。
至少在x86和ARM上,“堆栈”是为了放置本地变量和函数调用返回地址而保留的一块内存。当堆栈耗尽时,将访问保留区域外的内存。但是应用程序没有请求内核分配此内存,因此生成一个分段错误以进行内存保护。
堆栈溢出可能表现为明确的堆栈溢出异常(取决于编译器和体系结构),也可能表现为分段错误,即无效内存访问。最终,堆栈溢出是由于堆栈空间不足而导致的,堆栈空间不足的一个可能结果是读取或写入您不应访问的内存。因此,在许多体系结构上,堆栈溢出的结果是内存访问错误。