zoukankan      html  css  js  c++  java
  • 堆&栈, 内存分配

    1. 堆&栈 

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

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

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

    示意图:   

    2.内存分配

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

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

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

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

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

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

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

  • 相关阅读:
    SqlHelper
    asp.net中窗口相关操作总结(javascript)
    ASP.NET顯示對話框
    为ASP.NET控件添加常用的JavaScript操作
    右键弹出菜单
    log4net的初使用
    QQ/MSN右下角弹出提示窗口
    简便无刷新文件上传系统
    简单的自动更新程序实
    SQL中的单记录函数
  • 原文地址:https://www.cnblogs.com/yangzhifan/p/4521248.html
Copyright © 2011-2022 走看看