内存五大区
- 栈区
主要存储运行程序的中间结果和断点信息。包括一些
函数
的参数
和局部变量
的值。由系统自动分配
和释放
。在内存中,栈是一块形同数组的连续存储空间,数据的存储遵循“先进后出
”的原则,栈区域的地址由高地址
向低地址
增长,也就是说,存放的数据越多,栈顶的地址越低。
- 堆区
就是那些由
new alloc
创建的对象所分配的内存块
,它们的释放系统不会主动去管,由我们的开发者去告诉系统什么时候释放这块内存(一个对象引用计数为0是系统就会回销毁该内存区域对象)。一般一个new
就要对应一个release
。在ARC
下编译器会自动
在合适位置为OC对象添加release
操作。会在当前线程Runloop退出
或休眠
时销毁
这些对象,MRC则需程序员手动释放。
- 全局区
全局变量
和静态变量
被分配到同
一块内存
中,在以前的 C 语言中,全局变量又分为初始化的和未初始化的(初始化的全局变量和静态变量在一块区域,未初始化的全局变量与静态变量在相邻的另一块区域,同时未被初始化的对象存储区可以通过 void* 来访问和操纵,程序结束后由系统自行释放),在 C++ 里面没有这个区分了,他们共同占用同一块内存区。
- 常量区
主要存储
常量
。
- 代码区
主要存储用二进制表示的程序代码