专栏首页ios 技术积累ios内存管理-内存管理范围

ios内存管理-内存管理范围

要了解ios内存管理范围,首先我也应该了解一下内存的几大区域

1031687-20171024133212535-985895451.png

1、栈区(stack) — 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。 2、堆区(heap) — 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3、全局区(静态区)(static)— 全局变量和静态变量的存储是放在一块的,初始化的 全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域, 程序结束后由系统释放。 4、常量区 — 常量字符串就是放在这里的。 程序结束后由系统释放。 5、程序代码区 — 存放函数体的二进制代码。

还有两个知识点也顺便了解一下

申请后的系统是如何响应的?

栈: 只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。 堆: 首先应该知道操作系统有一个记录空闲内存地址的链表。当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。

申请大小的限制是怎样的?

栈:栈是向低地址扩展的数据结构,是一块连续的内存的区域。是栈顶的地址和栈的最大容量是系统预先规定好的,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数 ) ,如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。 堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。

申请效率的比较?

栈:由系统自动分配,速度较快。但程序员是无法控制的。 堆:是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便.

好了现在来说一下ios内存管理的范围 只有oc对象才需要内存管理,非OC对象(如:char、int、folat)则不需要管理内存

原因: OC对象是放在堆里,一般由程序员分配释放,若程序员不释放,程序结束时由OS回收 非OC对象是放在栈里,栈系统会自动管理

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • iOS RunLoop

    RunLoop就是一个事件处理的循环,用来不停的调度工作以及处理输入事件(比如说触摸事件、UI刷新事件、定时器事件、Selector事件),从而保持程序的持续运...

    赵哥窟
  • iOS xib控件变成框框 An internal error occurred

    an internal error occured.Editing functionality may be limited

    赵哥窟
  • Java 数组的基本操作

    遍历数组就是获取数组中的每个元素。通常遍历数组都是使用for循环来实现。 下面是遍历一个二维数组

    赵哥窟
  • [Leetcode][python]Merge k Sorted Lists/合并K个排序链表

    用一个大小为K的最小堆(用优先队列+自定义降序实现)(优先队列就是大顶堆,队头元素最大,自定义为降序后,就变成小顶堆,队头元素最小),先把K个链表的头结点放入堆...

    后端技术漫谈
  • Cache一致性导致的踩内存问题

    本文主要分享一个Cache一致性踩内存问题的定位过程,涉及到的知识点包括:backtrace、内存分析、efence、wrap系统函数、硬件watchpoint...

    coderhuo
  • iOS微信内存监控

    目前iOS主流的内存监控工具是Instruments的Allocations,但只能用于开发阶段。本文介绍如何实现离线化的内存监控工具,用于App上线后发现内存...

    WeTest质量开放平台团队
  • Chrome开发者工具不完全指南:(三、性能篇)

     卤煮在前面已经向大家介绍了Chrome开发者工具的一些功能面板,其中包括Elements、Network、Resources基础功能部分和Sources进阶功...

    bear_fish
  • zephyr笔记 2.3.3 堆内存池

    堆内存池是一个预定义的内存池对象,它允许线程以类似 malloc() 方式从公共内存区域动态分配内存。

    twowinter
  • LINUX上MYSQL优化三板斧

    云豆贴心提醒,本文阅读时间7分钟 现在MySQL运行的大部分环境都是在Linux上的,如何在Linux操作系统上根据MySQL进行优化,我们这里给出一些通用简...

    小小科
  • MacBook 问题汇总

    原因:电源电量充足,充电器绿色的灯不会亮,说明不在充电。 解决:等电池电量耗尽,在充电就会显示百分比

    城市中的游牧民族

扫码关注云+社区

领取腾讯云代金券