堆栈的概念一直比较朦胧,今天做一下梳理总结
参考:
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的对象和数组。
- 不同于数据结构的堆(是一个树),内存分配的堆是以链表结构存在的。
- 操作系统通过调用语言的运行时进行分配,初始分配一个大小,在使用时可以动态扩展,使用完成后若不手动释放,不会立即释放,要等待垃圾回收时才会释放。
- 访问速度慢。若需要分配大亮内存时推荐使用。
注:数据结构中的堆栈概念
栈:先进后出的数据结构。
堆:一棵树。