堆和栈的区别

一.堆和栈的概述
栈:编译器自动分配内存,存放参数值以及局部变量的值,类似于数据结构中的栈,使用完成后由系统自动回收内存.
堆:需要程序员手动的开辟和释放内存,存放全局变量和静态变量等.
二.堆和栈存储数据的特点:
栈:先入后出,CocoaTouch框架中对于导航控制器中控制器的维护就是采用了栈的方式,push代表入栈,pop代表出栈.只要栈的剩余空间大于申请的内存空间,系统会为程序提供内存,负责会内存溢出.分配速度快,但是我们无法控制.
堆:先入先出,例如在CocoaTouch框架中Application类就维护的事件队列就是采用了堆的形式.操作系统有一个记录空闲地址的链表,当申请内存地址时,系统首先会遍历保存的链表,寻找第一个空间大于所申请空间的节点.然后将该节点的空间分配给程序,然后将这个节点从空闲链表的节点中删除.分配速度慢,会产生内存碎片但是可定制性高.

PS:动态分配和静态分配的区别
在编译器根据变量(对象)的类型确定内存空间,叫做静态分配.有些变量(对象)在编译期无法确定对象的类型,也就无法确定需要分配给变量(对象)的内存大小,只能在运行时分配,这就是动态分配.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容