• 堆与栈的区别


    堆栈的空间分配:

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

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

    堆栈的缓存方式:

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

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

    效率比较:

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

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

    存储内容:

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

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

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

  • 相关阅读:
    HDU_2191_多重背包
    HDU_1494_dp
    POJ_1088_dfs
    所有的畅通工程[HDU1232][HDU1874][HDU1875][HDU1879]
    畅通工程[HDU1863]
    还是畅通工程[HDU1233]
    最小生成树
    Who's in the Middle[HDU1157]
    Bungee Jumping[HDU1155]
    Is It A Tree?[HDU1325][PKU1308]
  • 原文地址:https://www.cnblogs.com/yizhixiaowenzi/p/14601303.html
Copyright © 2020-2023  润新知