zoukankan      html  css  js  c++  java
  • 堆和栈

    常见问题:

    1.堆和棧的区别

    数据结构中的堆栈区别:

    是两种数据结构,栈 是一种线性结构,表中数据是遵循先入后出的原理

    堆 是一种特殊的树形结构,是完全二叉树,

    操作系统中的堆栈:区别

    堆:按需申请,动态分配,在程序结束前是不会删除已申请内存,需要程序主动释放请求(free delete),用了以后忘记释放,内存泄漏,可以理解为当前可以使用的闲置内存,OG

    栈:在程序编译的时候,由编译器参数决定大小分配的内存,用于存储局部变量,或者函数调用栈的保存。当局部变量离开作用域,所占内存就会被系统释放。

    栈的另一个作用则是保存函数调用栈,这时和数据结构的栈就有关系了。在函数调用过程中,常常会多层甚至递归调用。每一个函数调用都有各自的局部变量值和返回值,每一次函数调用其实是先将当前函数的状态压栈,然后在栈顶开辟新空间用于保存新的函数状态,接下来才是函数执行。当函数执行完毕之后,栈先进后出的特性使得后调用的函数先返回,这样可以保证返回值的有序传递,也保证函数现场可以按顺序恢复。操作系统的栈在内存中高地址向低地址增长,也即低地址为栈顶,高地址为栈底。这就导致了栈的空间有限制,一旦局部变量申请过多(例如开个超大数组),或者函数调用太深(例如递归太多次),那么就会导致栈溢出(Stack Overflow),操作系统这时候就会直接把你的程序杀掉

    你得先看重你自己,否则别人就会当你一钱不值。
  • 相关阅读:
    libstdc++.so.5: undefined reference to `memcpy@GLIBC_2.14'
    Redis开启远程访问
    Centos7.5 防火墙设置
    Redis和MemCache的区别
    Redis的事务
    Redis持久化——AOF
    Redis持久化——RDB快照
    Redis配置文件介绍
    Redis常见操作命令
    Redis的五大数据类型
  • 原文地址:https://www.cnblogs.com/ajiffuu/p/14590617.html
Copyright © 2011-2022 走看看