ios-内存五大区域

ios内存五大区域

image.png
  • 栈区
    函数内部的局部变量,传进来的参数的指针都是放在栈区的,栈区的内存空间由系统管理,它是一段连续的地址空间,遵循FILO先进后出原则,相对堆区来说较小,便于查询。
  • 堆区
    我们通过malloc、calloc、realloc创建的对象都是存在堆区的,堆的内存空间由程序员自己管理的,它是通过链表的结构存储的,遵循先进先出(FIFO)原则,相对栈区来说比较大,由于它的链表结构使得它增删操作方便,查询比较困难
  • 全局变量/静态变量区
    全局/静态区 是存放全局变量和静态变量的。
    已初始化的全局变量和静态变量存放在一块区域。
    未初始化的全局变量和静态变量在相邻的另一块区域。
    由 static 修饰的变量会成为静态变量,该变量的内存由全局/静态区在编译阶段完成分配,且仅分配一次。
    static 可以修饰局部变量也可以修饰全局变量。
    全局/静态区 的内存在编译阶段完成分配,程序运行时会一直存在内存中,只有当程序结束后才会由操作系统释放。
  • 常量区
    常量区是编译时分配的内存空间,在程序结束后由系统释放,主要存放
    已经使用了的,且没有指向的字符串常量
    字符串常量因为可能在程序中被多次使用,所以在程序运行之前就会提前分配内存
  • 代码区
    我们写的代码经过编译以二进制的形式存储在代码区的。


    image.png

你可能感兴趣的:(ios-内存五大区域)