zoukankan      html  css  js  c++  java
  • 堆与栈的区别

    堆栈的空间分配:

      栈(操作系统):由操作系统自动分配释放,存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈。

      堆(操作系统):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式类似于链表。

    堆栈的缓存方式:

      栈使用的是一级缓存,他们通常都是 被调用时处于存储空间中,调用完毕立即释放

      堆存放在二级缓存中,生命周期由虚拟机的垃圾回收算法决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速读相对慢一些

    效率比较:

      栈:由系统自动分配,速度较快,但是程序员无法控住

      堆:是由新分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来方便

    存储内容:

      栈:在函数调用时,在大多数的C编辑器中,参数是由右往左入栈的,然后是函数中得局部变量(注意,静态变量是不入栈的)

        当本次调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向函数的返回地址,也就是主函数中的下一条指令的地址,程序由该点继续执行

      堆:一般是在堆的头部用一个字节存放堆的大小,堆中的具体内容由程序员安排

  • 相关阅读:
    NHibernate错误集锦
    potree的第三方库
    potree的API说明文档
    potreeConverter之数据处理
    potreeConverter之环境配置
    SpringBoot读取配置文件信息
    SpringBoot启动tomcat失败
    AbstractRoutingDataSource动态切换数据源
    多数据源配置(Spring+mybatis)
    单一数据源配置(Spring+Mybatis)
  • 原文地址:https://www.cnblogs.com/yizhixiaowenzi/p/14601303.html
Copyright © 2011-2022 走看看