堆和栈
来源:互联网 发布:阿拉伯语自学软件 编辑:程序博客网 时间:2024/04/30 00:13
看书和上网的时候经常遇到堆栈这个概念,一直也都不怎么明白,觉得懂了吧,又解释不出来。查了一下网上的资料,说堆栈是一种数据结构,是一个很模糊的概念。大概意思就是,栈是系统自动分配的,堆是由程序员自己按照自己的需求来分配的。一个程序运行结束了之后,由系统分配的栈上的资源将由系统自己释放掉,而堆区必须由程序员自己释放掉,不然就会造成内存泄露。这样说,栈就是系统的地盘,堆是程序员自己的地盘。我的地盘我做主,不过,在系统的栈上,服务还是相对要好一些,效率相对要高一些。
系统内存被系统分为,进程头、代码区、数据区、栈空间,剩下的留作堆空间。(只是一个简单的内存划分方式)
代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域来取指并执行。
数据区:用于存储全局变量等。
堆区:进程可以在堆区动态的请求一定大小的内存,并在用完之后归还给堆区。动态分配和回收是堆区的特点。
栈区:用于动态的存储函数之间的调用关系,以保证被调用函数在返回时恢复到母函数中继续执行。
总之:
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味。
PS:
相关知识:系统内存的分配,静态储存,NEW分配空间都是在堆里,局部变量都是在栈里,还有new和delete是东西啊。先写这么多吧,看多了会消化不良的,头痛。
参考文献:
http://topic.csdn.net/t/20030403/17/1615413.html
http://www.hacker.com.cn/article/view_15425.html
http://www.top-e.org/jiaoshi/html/?427.html
- 堆、栈和本地堆
- 什么是堆和栈
- 堆和栈
- "堆"和"栈"
- "堆"和"栈"
- 堆和栈
- 堆和栈
- 堆和栈
- 堆和栈
- 栈和堆
- 堆、栈和堆栈
- zz堆和栈
- 堆和栈
- 堆和栈
- 栈和堆
- 堆和栈
- 堆和栈
- 转:堆和栈
- 求二项式因子的算法
- 生什么病,吃什么水果
- VC6打开文件时错误
- Berkeley DB 1.8.6源代码学习(八)
- 详析VC中坐标系的建立
- 堆和栈
- linux的GPIO应用实例
- POJ2386 Lake Counting
- DBhelper有些不懂,请各位指教
- 根文件系统制作 busybox移植
- INSERT INTO 语句 中的 引号问题
- 解析动态联编
- Javascript验证练习。请求师兄修改bug 。出错时候为什么不能显示 “确定”按钮??
- Firefox下拖拽客户端文件到浏览器达到上传效果的实现(java例)