A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 笑声不断 中级黑马   /  2016-1-13 10:50  /  647 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

研究了好久这个问题,由于之前没有基础大概分析下,栈和堆的区别,以及其他存储方式。
栈(stack)、堆(heap)

概念:堆和栈都是数据结构,是一个特殊的存储区,主要用来暂时存放数据和地址。

栈:其同数据结构中的栈类似。用于存储参数和局部变量。该存储空间不用申请,有操作系统自动分配和释放。

      栈在中文中就说一个仓库,所以类似仓库你先放进去的最后才能取出。也就类似先放进去的最后释放。其实栈是相对较高的地址,以地址的增长方向为上的话,栈地址是向下增长的。

      优点:读取速度较堆要快,

      缺点:灵活性低,数据大小和生命周期有限。栈中存放的数据无法在多线程之间共享。

堆:其同数据结构中的栈不是一个概念。要有程序员自己申请和释放,如果不释放可能在程序结束时,有系统收回。其遵循先进先出的原则。

     优点:比较灵活,能够自己规定分配内存的大小,编译器无法获知其生命周期。

     缺点:由于在运行时才能分配动态空间,会降低运行速度。

具有存储概念的名词还有:全局去,文字常量区,程序代码区

全局区:有static修饰的变量,全局变量和静态变量的存储是放在一块的,程序结束后由系统释放。

文字常量区:有程序结束后系统释放。一些常量字符串就存储在该区。

程序代码区:将代码转换成二进制后存储的区域。

栈就例如我们只要结果,而不必担心如何达到这个结果。

而堆就要为自己的结果负责,自己的行为造成自己的结果。

注意:

1)在main函数之外的都是存储在全局区。

2)在main函数内部,有static 修饰的是全局区。

    变量都处于栈中,字符串是位于常量区。

    分配空间的语句造成的分配在堆。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马