iOS堆和栈以及内存分布

作者: 编程_书恨少 | 来源:发表于2016-08-17 10:08 被阅读196次

1.iOS中一共分为,代码区,常量区,全局区/静态区(初始化的),全局区/静态区(未始化的), 这几个区是随着程序的启动就被加载到内存中的,也会随着程序的关闭被销毁,我们不需要管理这一部分的内存。注意:这也是为为什么在程序中要尽量减少全局变量/静态变量的使用,因为它会一直存在,占用内存

2.当然除了上面的几部分,还有最重要的两部分,堆区和栈区。堆区的变量内存空间分配一般是在我们写alloc的时候,堆中存放的是对象,我们需要管理的是堆中的内存。虽然现在我们已经习惯了使用ARC,但是ARC也是需要管理内存的,它是在编译器编译的时候,自动添加retain,release,autorelease。

3.栈区存放局部变量,先进后出,当程序执行出了作用于的范围,栈区局部变量就会被销毁,所以我们也不需要管理栈区的内存。

基本的内存分布就是这样了

下面我们来着重的讲一下内存分配

1.在iOS中,堆区的内存是所有应用程序共享的

2.堆区内存分配是由系统来负责的

3.系统通过链表来维护所有已经分配过的内存空间

4.系统只是记录分配了多少字节给应用程序,但是并不管理具体分配给的对象类型

5.变量使用结束后,需要释放内存。在OC中当retainCount == 0时,就说明没有任何变量使用该空间,那么系统就会直接回收

6.如果我们使用某一个变量之后,不释放内存,那么该内存就会被永远占用,造成内存泄漏

7.当对象已经释放,但是程序中的变量仍然指向该内存地址,这个时候,如果向该对象发送消息,就会出现经典的野指针错误

相关文章

  • iOS堆和栈以及内存分布

    1.iOS中一共分为,代码区,常量区,全局区/静态区(初始化的),全局区/静态区(未始化的), 这几个区是随着程序...

  • iOS知识点

    1、内存的几大区域 iOS的内存分布区域大致分为:栈区(stack)、堆区(heap)和全局静态区(static)...

  • 10.11java中的堆和栈

    java高级-堆和栈 java堆 /栈 栈内存 / 堆内存的区别 1. java堆 /栈 2. 栈内存 / 堆内存的区别

  • iOS的内存管理

    1.iOS内存管理区域分为以下5个区域: 栈区,堆区,静态区,常量区在内存分布中以由高地址向低地址分布的. (1)...

  • 内存管理

    IOS的内存分布是有五个区: 栈区:函数,⽅法,常量,指针 堆区:通过alloc分配的对象,block copy ...

  • java中栈内存和堆内存有什么区别

    java中栈内存和堆内存有什么区别 栈内存和堆内存的区别: 1、栈内存用来存放基本类型的变量和引用变量,堆内存用来...

  • 内存

    内存的几大区域 栈内存和堆内存 所谓的栈内存和堆内存并不是内存里面有一块区域叫栈,有一块区域叫堆.所谓的栈内存和对...

  • iOS中的堆和栈

    内存分配图: 参考: iOS中堆和栈的理解 What and where are the stack and he...

  • Effective Objective-C读后笔记(1)

    1、Objective-C中的内存分布 对象类型内存分布在堆里面,是直接管理内存。 指针类型分布在栈里面系统帮我们...

  • iOS中:栈和堆概念

    iOS中栈和堆 栈: 系统自动分配内存堆: 程序员手动分配内存 1、代码区:用来存放函数的二进制代码,在运行时要防...

网友评论

    本文标题:iOS堆和栈以及内存分布

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