zoukankan      html  css  js  c++  java
  • iOS内存区域分布

    概览

    1,RAM ROM

    2,内存的几大区域

    3,案例解释

    RAM ROM

    RAM:运行内存,不能掉电存储。

    ROM:存储性内存,可以掉电存储,例如内存卡、Flash。

    内存的几大区域

    为了合理的分配有限的内存空间,将内存区域分为五个区,由低地址向高地址分类分别是:代码区、常量区、全局静态区、堆、栈

    • 代码区

      用来存放函数的二进制代码,在运行时要防止被非法修改,只允许读取不允许操作

    • 常量区

      存储常量数据,通常程序结束后由系统自动释放

    • 全局静态区

      全局区又可分为未初始化全局区:.bss段和初始化全局区:data段。全局变量和静态变量的存储是放在一块的。

      初始化的全局变量和静态变量在一块区域。

      未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,在程序结束后有系统释放。

      由程序员分配和释放,若程序员不释放,程序结束时可能由OS回收。堆是向高地址扩展的数据结构,是不连续的内存区域,以链表的方式进行存储。

      栈是由编译器自动分配并释放,存放函数的参数值,局部变量的值等。栈是向低地址扩展的数据结构,是不连续的内存区域,采用后进先出(LIFO )。

    案例解释

    int i = 10; //全局初始化
    char *a; //全局未初始化区
    - (void)test {
        int b;//栈区
        NSString *str = @"123";//常量区
        static int c = 0;//全局(静态)初始化区
        NSObject *obj = [[NSObject alloc]init];//堆区
    }
    
  • 相关阅读:
    使用MOCK对象进行单元测试
    软件项目管理的圣经人月神话(中)
    java中使用MD5进行计算摘要
    Windows平台安装Bugzilla(上)
    dom4j学习总结(二)
    深入解析ATL(第二版ATL8.0)(2.12.2节)
    深入了解JUnit 4
    java中关于时间日期操作的常用函数
    使用XStream需注意的问题
    Windows平台安装Bugzilla(下)
  • 原文地址:https://www.cnblogs.com/Lanht/p/10290053.html
Copyright © 2011-2022 走看看