堆和栈

来源:互联网 发布:阿拉伯语自学软件 编辑:程序博客网 时间: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

原创粉丝点击