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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 血马雄风 中级黑马   /  2015-8-23 08:26  /  615 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一、程序所占用内存的分类
1、栈区(stack):由编译器自动分配和释放。存放函数的参数值、局部变量值等。
                操作方式类似数据结构的中的栈。
    2、堆区(heap):由程序员分配和释放(程序员不释放,程序结束时由os释放)。其与数据结构中的堆使两回事。操作方式类似链表。
    3、全局区(静态区)(static):全局变量与静态变量存放在一块。程序结束后由系统释放。
4、文字常量区:存放常量字符串。程序结束后由系统释放。
5、程序代码区:存放函数体的二进制代码。
二、栈与堆的区别
1、数据结构上的栈与堆
  1)栈:一种“后进先出”性质的数据结构。
  2)堆:一种经过排序的树形数据结构。
  3)程序的栈与堆和数据结构上的栈与堆有所区别。
    1、申请与回收方式
      1)栈:由系统自动分配和回收。例如:int b;
      2)堆:程序员自己申请,手动回收(C的free(),C++的delete),JAVA虚拟机自动回收。例如:p = new Font();  
             //p在栈区,new Font()在堆区(C中的molloc()函索有此功能)
    2、大小限制和响应
      1)栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存空间,最大空间为2M。申请后,只有栈的剩余空间大于所申请空间,系统为程序提供内存。如果申请的空间超过栈的剩余空间,将会提示overflow。
      2)堆:堆是向高地址扩展的数据结构,是一块不连续的内存空间,其空间大小受限于计算机系统中有效的虚拟内存。因此,堆获得的空间比较灵活,且较大。申请后,程序首先遍历一个链表(该链表记录空闲内存地址),直到找到第一个空间大于所申请空间的堆。
   3、申请速度
      1)栈:速度块,但程序员无法控制。
      2)堆:速度较慢,且容易产生内存碎片,不过用起来方便。
   4、存储内容
      1)栈:首先是函数调用后的下一条指令(函索调用语句的下一条可执行语句)的地址,然后是函索的各个参数(由右往左入栈),最后是函数的局部变量。
      2)堆:由程序员安排。

5 个回复

倒序浏览
不错,值得一看
回复 使用道具 举报
总结的很详细
回复 使用道具 举报
又学到知识l,赞一个
回复 使用道具 举报
分享了。。
回复 使用道具 举报
cc3441251 来自手机 中级黑马 2015-8-23 09:07:16
地板
学习了,谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马