堆和栈的区别

堆栈的概念一直比较朦胧,今天做一下梳理总结

参考:
http://kb.cnblogs.com/page/501239/
http://www.cnblogs.com/mysticCoder/p/4921724.html
http://www.cnblogs.com/perfy/p/3820594.html

此处的堆、栈,指的是操作系统中对内存的使用方式,不同于数据结构中的堆、栈的概念!!!

  • 为执行线程留出的内存空间,都在Ram中。可用来存放局部变量,引用变量(引用在栈里,引用的内容在堆里)。
  • 类似于数据结构的栈,后进先出。
  • 由操作系统分配,分配时大小就确定了,使用完毕立即回收。
  • 访问速度快,只使用指针移动。但空间比较小。

  • 为动态分配留出的内存空间,都在Ram中。可用来存放手动new的对象和数组。
  • 不同于数据结构的堆(是一个树),内存分配的堆是以链表结构存在的。
  • 操作系统通过调用语言的运行时进行分配,初始分配一个大小,在使用时可以动态扩展,使用完成后若不手动释放,不会立即释放,要等待垃圾回收时才会释放。
  • 访问速度慢。若需要分配大亮内存时推荐使用。

注:数据结构中的堆栈概念
栈:先进后出的数据结构。
堆:一棵树。

原文地址:https://www.cnblogs.com/shanelau/p/6438130.html