iOS内存分配之堆和栈的区别

一、内存分区?

       ios内存分为栈区、堆区、全局区、常量区、代码区。

二、各分区介绍

      栈区:是编译器自动分配和释放的。一般存放局部变量、函数参数值得。栈---系统的数据结构,先进先出。

                 分配方式:分为静态分配和动态分配

                 静态分配:编译器完成,局部变量的分批额。

                 动态分配,alloc函数完成。

       堆区:是程序员分配和释放。顺序随意,有点灵活方便。

                  分配方式:只有动态分配的堆,

       全局区:static全局变量和静态变量。初始化的全局变量和静态变量,

                     全局区分为:未初始化的全局区,int a;未初始化,int a  = 10;已经初始化。

       常量区,存放常量字符串,程序结束由程序执行。

       代码区:存放二进制代码。


三、栈和堆的区别

       管理方式:

              1.栈区是由编译器自动分配和释放。

              2.堆区是程序员分配和释放。

       申请效率:

              1.栈区,由系统自动分配,速度较快,但程序员无法控制。

              2.堆区,由alloc分配内存,一般慢,产生内存碎片。

        分配方式

               1.栈区:2种分配方式,静态分配和动态分配,静态分配编译器完成,:局部变量,动态分配是alloc函数进行分配,不需要程序员实现。

               2.堆区:没有静态分配的堆,只有动态分配。

         申请大小:

                1.栈区:是向低地址扩展的数据结构,是一块连续的内存区域,栈顶地址和栈的容量是由系统分配,大小为2M,如果申请的空间大于栈剩余空间,将提示栈溢出。

                 2.堆区:是向高地址扩展的数据结构,是不连续的内存区域,大小受计算机中有效的虚拟内存,比较灵活。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值