美文网首页
iOS 堆和栈

iOS 堆和栈

作者: 小星星灬 | 来源:发表于2021-07-13 09:26 被阅读0次

    堆和栈

    全局(静态)区

    存放程序静态分配的变量和全局变量。

    栈区(stack) 

    由编译器自动分配并释放

    存放函数的参数值,局部变量等

    当一个方法执行时,会建立自己的内存栈,在这方法内定义的变量,局部变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法的内存栈也将自然销毁。

    栈一般来说都是一个先进后出的队列,后进入的数据,会被先释放掉.栈区存放函数内的局部变量,形参和函数返回值.栈区的内存由系统自动管理释放,内存的分配是连续的,且分配的内存地址是向下增长.申明的变量过了作用域范围后内存便会自动释放,不需要开发人员手动管理.

    堆区(heap) 

    大部分自定义的类都在堆中

    比如在ios 中 alloc 都是存放在堆中。

    在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为对象的创建成本通常较大),这个运行时数据区就是堆内存。

    堆内存中的对象不会随方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变量所引用(在方法的参数传递时很常见),则这个对象依然不会被销毁。只有当一个对象没有任何引用变量指向它时,系统的垃圾回收器才会在合适的时候回收它。

    iOS中数据是存在堆和栈中的,然而我们的内存管理管理的堆上的内存,栈上的内存并不是我们管理

    非OC对象(基础数据类型)存储在栈上

    OC对象存储在堆上

    相关文章

      网友评论

          本文标题:iOS 堆和栈

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