• 堆&栈, 内存分配


    1. 堆&栈 

     iOS程序加载时的内存顺序,首先是加载的代码区, 其次是常量区,加载之后不能修改,然后是初始化之后的全局区/静态区, 再是没有初始化的全局区/ 静态区 ---------以上几个部分是随着程序的启动加载到内存中,随着程序的销毁才从内存中销毁, 程序员不需要管理这部分内存!而且, 要尽量少使用全局变量,因为它从一加载就在内存中。

      然后,是堆区,先进先出, 内存地址由小到大。堆区的变量内存空间分配都是使用alloc,程序员需要管理堆区的内存。ARC 的内存管理,是编译器在编译的时候,自动添加 retain,release,autorelease

      然后,是栈区,先进后去,内存地址由大到小。存放局部变量,一旦出了作用域就会被销毁,程序要不需要管理栈区内存

    示意图:   

    2.内存分配

      1. iOS中堆区的内存是所有应用程序共享的

      2.堆中的内存分配是有系统来负责的

      3.系统使用一个链表是维护已经分配过的内存

      4.系统只是记录分配了多少字节给应用程序,并不管理具体的类型“匿名”

      5.变量使用结束后,需要释放内存。 OC中当一个变量的引用计数为0 的时候,说明没有任何变量指向该空间,系统就会直接收回

      6.内存泄露, 如果变量使用之后, 不释放内存,该内存区域永远被占用,就会造成内存泄露

      7.野指针,当对象被释放,变量的指针仍然指向该内存地址,如果向该对象发送消息,就会发生野指针错误

  • 相关阅读:
    C# 单元测试
    支持库:DateTime扩展
    根据枚举名称创建枚举
    支持库:String扩展
    数组的几道面试题转
    java推荐书籍及下载
    Python天天美味(总) 转
    python 实现文件的递归拷贝转
    关于python文件操作转
    JDK源码分析收藏地址
  • 原文地址:https://www.cnblogs.com/yangzhifan/p/4521248.html
Copyright © 2020-2023  润新知