zoukankan      html  css  js  c++  java
  • 堆栈溢出一般是什么原因?

    堆栈是一个在计算机科学中经常使用的抽象数据类型。堆栈中的物体具有一个特性: 最后一个放入堆栈中的物体总是被最先拿出来, 这个特性通常称为后进先出(LIFO)队列。 堆栈中定义了一些操作。 两个最重要的是PUSH和POP。 PUSH操作在堆栈的顶部加入一 个元素。POP操作相反, 在堆栈顶部移去一个元素, 并将堆栈的大小减一。

    堆栈溢出的产生是由于过多的函数调用,导致调用堆栈无法容纳这些调用的返回地址,一般在递归中产生。堆栈溢出很可能由无限递归(Infinite recursion)产生,但也可能仅仅是过多的堆栈层级。

     

    堆溢出:不断的new 一个对象,一直创建新的对象,

    栈溢出:死循环或者是递归太深,递归的原因,可能太大,也可能没有终止。

    通常「堆栈溢出」是指「调用堆栈(call stack)的溢出」。要通俗地解释调用堆栈可能比较困难,因为它涉及许多其他计算机架构的知识。而这个答案只是简单地解释堆栈这种数据结构的特点──先进后出/后进先出。溢出是指这个数据结构满溢,不能存放更多数据。其他的数据结构也会遇到这个情况。即使数据结构并非固定容量,而是可扩展的,在有限的内存空间下仍是有满溢的机会。

    另外,很多时候,「调用堆栈溢出」的出现是与递归(recursion)相关的。我们可以把一些递归的实现改为迭代(iteration),但有时还是必须有一个自定义的堆栈数据结构,例如对树的深度优先搜索(Depth-First Search, DFS)。自定义的堆栈也是有溢出的可能。

    所以,虽然堆栈溢出常指调用堆栈溢出,但本质上也只是一种数据结构的满溢情况。

  • 相关阅读:
    xshell使用密钥登陆服务器
    SQLyog使用隧道登陆数据库
    puttygen.exe生成ppk格式密钥
    xshell生成密钥对
    性能测试基础---jmeter函数二次开发
    Python:基础知识(二)
    异常点检测
    Python:numpy.newaxis
    三张图读懂机器学习:基本概念、五大流派与九种常见算法
    机器学习:样本集、验证集(开发集)、测试集
  • 原文地址:https://www.cnblogs.com/CDHQ1666760231/p/10364807.html
Copyright © 2011-2022 走看看