堆与栈的区别

堆栈的空间分配:

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

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

 

堆栈的缓存方式:

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

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

 

效率比较:

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

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

 

存储内容:

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

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

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

posted on 2021-03-31 14:26  二十四岁半  阅读(43)  评论(0编辑  收藏  举报

导航