码迷,mamicode.com
首页 > 其他好文 > 详细

堆和栈

时间:2014-11-19 12:01:39      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:ar   sp   bs   c   nbsp   程序   har   程序员   总结   

堆和栈的区别

1. 分配方式

栈:由系统分配。例如:局部变量 int b ,系统自动为变量b开辟空间。

堆:需要程序员主动开辟空间,并指定大小。例如:p = (char *)malloc(1024),开辟的1024字节空间存放在堆中,注意变量p还是在栈中。

 

2. 申请后的响应

栈:只要所申请的空间小于剩余的空间,系统将提供内存空间,否则栈溢出。

堆:当收到内存申请时,系统会遍历一个记录空闲空间的链表,把遍历到的第一个大于申请空间的堆节点分配给程序,最后把该节点从链表中删除。

  当然,分配的空间大小不一定等于所申请的空间大小,剩余的空间重新放入空闲链表中。

 

3. 分配空间的限制

栈:地址连续。由高地址向低地址分配,由此可见,栈顶地址和栈的大小已经编译时固定好。

堆:地址不连续。由低地址向高地址扩展,因为链表是从低地址向高地址遍历,大小与有效的虚拟内存相关。

 

4. 效率

栈:分配速度快,效率高。

堆:分配速度慢,效率相对低,容易产生碎片。

 

5. 总结

栈:速度快,自由度小,方便。

堆:速度相对慢,自由度高,相对麻烦。

堆和栈

标签:ar   sp   bs   c   nbsp   程序   har   程序员   总结   

原文地址:http://www.cnblogs.com/achsnw/p/4107618.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!