Chinaunix首页 | 论坛 | 博客
  • 博客访问: 165953
  • 博文数量: 41
  • 博客积分: 647
  • 博客等级: 上士
  • 技术积分: 366
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-29 14:13
文章分类

全部博文(41)

文章存档

2013年(11)

2012年(1)

2011年(29)

分类: C/C++

2011-11-14 13:10:20

栈是由编译器在程序运行时分配空间区域,由操作系统维护。(局部变量,函数参数等)
堆是由malloc()函数分配的内存块,内存释放由程序员手动控制,在C中使用free,在C++中使用delete。
 
它们的主要区别有:
1.管理方式不同
程序在运行时栈由操作系统自动管理,无需程序员手动控制;而堆空间的申请释放工作由程序员控制,容易产生内存泄露。
2.空间大小不同
栈是向低地址扩展的数据结构,是一块连续的内存区域。
堆是向高地址扩展的数据结构,是一块不连续的内存区域,系统用链表来存储。
3.产生碎片不同
对于堆来讲,频繁的malloc/free势必会造成内存空间的不连续,从而造成大量的碎片。而栈没有。
4.增长方式不同
5.分配方式不同
6.分配效率不同
堆的分配效率比栈要低得多。
阅读(2275) | 评论(1) | 转发(6) |
0

上一篇:Makefile 参数

下一篇:常见内存错误分析

给主人留下些什么吧!~~

szc9822011-11-15 00:11:02

new()比较好用\(^o^)/~