OC的五大内存区域

作者: 邓布利多教授 | 来源:发表于2019-03-26 15:25 被阅读0次
  • 栈区(stack)
  • 堆区(heap)
  • 全局区/静态区(BSS段和数据段)
  • 常量区
  • 代码区(代码段)

1、栈区

栈区:又称堆栈。由系统编译器自动分配并释放内存,不需要手动管理。存储对象包括函数的参数值和局部变量等。栈对应的进程/线程是唯一的,栈与栈之间是互相独立的。栈是向低地址扩展的数据结构,是一块连续的内存区域。栈是线性结构。

  • 优缺点:由系统自动分配和管理,速度较快。由于它的后出先进(LIFO)特性,所以数据不够灵活。栈的大小是2M(或者是1M?),因此,能获得栈的空间较小。

2、堆区

堆区:堆是由我们主动对内存的分配和释放,在OC中的ARC模式下,由我们主动分配内存,系统编译器会自动在合适的位置为OC对象添加release操作,自动帮我们释放掉内存;而MRC模式下则需要我们自己对OC对象添加release操作。存储对象就是由alloc、init或new创建出来的对象。堆空间的分配是动态的,操作系统可以在进程初始化的时候分配,也可以在运行过程中向系统要额外的堆。不同堆分配的内存无法互相操作。堆向高地址扩展的数据结构,是不连续的内存区域。堆是链式结构。

  • 优缺点:由我们手动new分配内存,速度没有系统自动分配的速度快,容易产生内存碎片,使程序效率降低。但是由于它的数据适应面广泛,所以数据足够灵活方便。堆的大小是由设备的虚拟内存决定的,所以堆的大小比栈要大的多。
栈和堆的区别
  • 按管理方式区分
    ,是由系统编译器自动管理,不需要程序员手动管理。
    ,ARC下释放工作有系统自动操作;MRC下释放工作由程序员手动管理,不及时回收容易产生内存泄露。

  • 按分配方式区分
    是动态分配和回收内存的,没有静态分配的堆。
    有两种分配方式:静态分配动态分配
    静态分配是系统编译器完成的,比如局部变量的分配。
    动态分配是有alloc函数进行分配的,但是栈的动态分配和堆是不同的,它的动态分配也由系统编译器进行释放,不需要手动管理。

  • 按碎片区分
    ,由于是连续的,先进后出的队列,一一对应,没有碎片。
    ,由于频繁的创建和释放必定会造成内存空间的不连续,进而造成大量的碎片,使程序效率降低。

  • 按分配效率区分
    是由系统提供的数据结构,计算机会在底层对栈提供支持,分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。
    是由C/C++函数库提供的,它的机制是很复杂的。又因为是手动new的,所以效率没有栈的分配快。

  • 按缓存方式区分
    是存放在一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
    是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

  • 按数据结构区分
    是一种线性的、先进后出的数据结构。
    是一棵完全的二叉树。

3、全局区/静态区

全局区/静态区:包括两个分区:一个是存储未初始化的(BSS段);一个是存储已初始化的(数据段) —— 全局变量和静态变量。两个分区相邻,如果在BSS段中存储的全局变量和静态变量被初始化值之后,会被转存到数据段。存储在全局区/静态区的变量只会初始化一次。

4、常量区

常量区:存储常量字符串。

5、代码区

代码区(代码段):存储程序代码、指令、函数的二进制代码。

相关文章

  • 内存管理

    1. 内存管理. 2. 内存中的五大区域. 3. 存储在在堆中的OC对象. 4. 内存管理的范围: 5. 对象什么...

  • OC的内存管理,MRC与ARC以及一些常见名称概念

    OC的内存管理以及MRC与ARC 内存中的五大区域: 栈区,堆区,BBS段,数据段和代码段,其中除了堆区以外,其他...

  • OC的五大内存区域

    栈区(stack)堆区(heap)全局区/静态区(BSS段和数据段)常量区代码区(代码段) 1、栈区 栈区:又称堆...

  • OC内存区域

    c语言中形参和实参 形参 form parameter实参 real parameter出现在函数定义中的...

  • 内存管理

    目录一、内存分区 1、RAM和ROM 2、内存的五大分区二、内存管理 1、OC内存管理是指什么?OC内存管理的本质...

  • iOS 内存

    五大内存区域 栈区,堆区,全局区,常量区,代码区,五大内存区域之外还有 自由存储区也称之五大区域之外区、 栈区创建...

  • iOS 底层基础知识(1)

    1.五大内存区域 栈区,堆区,全局区,常量区,代码区五大内存区域之外还有 自由存储区也称之五大区域之外区 1.1栈...

  • 3.1 OC特性之 内存五大区域

    3.1 OC特性之 内存五大区域 此篇为针对Objective-c语言入门的基础知识,为了能让大家更清楚的理解,此...

  • 一、OC内存管理

    1、内存中的五大区域 栈:存储局部变量,当其作用域执行完毕之后,就会被系统立即收回 堆:存储OC对象,手动申请的字...

  • iOS内存管理

    内存中的五大区域引用计数ARC MRC属性所有权僵尸对象、野指针、空指针分别指什么,有什么区别? 内存中的五大区域...

网友评论

    本文标题:OC的五大内存区域

    本文链接:https://www.haomeiwen.com/subject/kpimmqtx.html