美文网首页
堆和栈的区别

堆和栈的区别

作者: 木子尚武 | 来源:发表于2017-08-30 10:32 被阅读21次

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

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

    相关文章

      网友评论

          本文标题:堆和栈的区别

          本文链接:https://www.haomeiwen.com/subject/guuzdxtx.html