内存的那些事

堆(heap)  为程序保存的一块内存区域,用来保存那些在运行时才知道其存在与大小的数据;  程序能够从堆中分配内存给这些元素;在用完之后,应该释放掉这些内存。  堆中所有的的东西都是匿名的----不能按名字直接访问只能通过指针间接的访问  

 

栈(stack)  为程序保存的一块内存区域,用来保存状态数据,  例如:过程或函数的地址,参数,有时候还包括局部变量。   所以,堆和栈的区别:一个是动态,一个是静态;  堆是在程序运行时动态分配的,而栈的分配是编译完后,就确定了;  栈内存的回收,系统自动进行了,而堆上分配的内存,需要手工显式回收。   malloc , new分配的内存就是在堆上的,如果不用free, delete回收,  就会造成内存泄漏(垃圾),不过,一般操作系统会在整个程序(进程)退出时,  回收分配给这个进程的内存等资源。

 

堆和栈的区别:

 

(1)操作系统方面区别:

 

在使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

 

(2)数据结构方面区别:

 

还有就是数据结构方面的堆和栈,这些都是不同的概念。这里的堆实际上指的就是(满足堆性质的)优先队列的一种数据结构,第1个元素有最高的优先权;栈实际上就是满足先进后出的性质的数学或数据结构。虽然堆栈,堆栈的说法是连起来叫,但是他们还是有很大区别的,连着叫只是由于历史的原因。

 

posted @ 2018-08-01 15:30  盖斗兮  阅读(121)  评论(0编辑  收藏  举报