美文网首页
性能优化——系统内存

性能优化——系统内存

作者: 小圆菜陪你财务自由 | 来源:发表于2019-10-15 18:14 被阅读0次
    栈区

    特点:由编译器自动完成分配和释放,不需要程序员手动管理,主要存储了函数的参数和局部变量值等。

    堆区

    特点:需要程序员手动开辟并管理内存。(OC有ARC, OC对象通常不需要程序员考虑释放问题)

    BSS段 (全局区)(静态区)

    特点:程序运行过程内存的数据一直存在,程序结束后由系统释放

    常量区 (数据段)

    特点:专门用于存放常量,程序结束后由系统释放

    程序代码区

    特点:用于存放程序运行时的代码,代码会被编译成二进制存进内存的程序代码区

    内存五大区:

    栈区和堆区是运行时分配的内存,其它区是编译时分配的
    栈区的地址是连续的,并且是由高到低分配的
    堆区的地址是不连续的,堆区的访问速度没有栈区快,因为堆区首先要找地址,然后再找值。而栈区直接找值。

    引用计数是怎么存储的?
    1. 如果对象使用了TaggedPointer, 苹果会直接将其指针值作为引用计数返回
    2. 引用计数可以直接存储在优化过的isa指针中
    3. 如果isa指针存储不下, 引用计数就会把一部分存储在一个散列表中
    PS: Tagged Pointer专门用来存储小的对象,例如NSNumber和NSDate。
    Tagged Pointer指针的值不再是地址了,而是真正的值。所以,实际上它不再是一个对象了,它只是一个披着对象皮的普通变量而已。
    所以,它的内存并不存储在堆中,也不需要malloc和free.
    

    相关文章

      网友评论

          本文标题:性能优化——系统内存

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