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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Juice.cy.wang 中级黑马   /  2015-11-26 17:32  /  1324 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  heap:   
  需要程序员自己申请,并指明大小,在c中malloc函数   
  如p1   =   (char   *)malloc(10);   
  在C++中用new运算符   
  如p2   =   new   char[10];   
  但是注意p1、p2本身是在栈中的。   
   
   
  2.2   
  申请后系统的响应   
  栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢  
  出。   
  堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,  
  会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表  
  中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的  
  首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。  
  另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部  
  分重新放入空闲链表中。   
   
  2.3申请大小的限制   
  栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意  
  思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有  
  的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将
  提示overflow。因此,能从栈获得的空间较小。   
  堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储  
  的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小  
  受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。   
   
   
   
  2.4申请效率的比较:   
  栈由系统自动分配,速度较快。但程序员是无法控制的。   
  堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便.   
        在此,供大家参考。

15 个回复

倒序浏览
受教了,谢谢
回复 使用道具 举报
不错,已收藏
回复 使用道具 举报
好帖,收藏了
回复 使用道具 举报
好深奥的样子 ,不过我看老毕的视频有讲这个我觉得讲的很好的说,一下子就懂了
回复 使用道具 举报
马克 收藏了
回复 使用道具 举报
很是详细,明白了好多
回复 使用道具 举报
涨知识了
回复 使用道具 举报
zhuwenjia 来自手机 中级黑马 2015-12-2 23:13:18
9#
谢谢分享
回复 使用道具 举报
感谢分享
回复 使用道具 举报
这部分内容在哪里?
回复 使用道具 举报
感谢分享
回复 使用道具 举报
感觉老毕讲到数组的时候讲了一下栈内存和堆内存 但是讲的实在太快了..
回复 使用道具 举报
详解1在哪里啊???
回复 使用道具 举报
学习了,谢谢分享。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马