一、内存分区?
ios内存分为栈区、堆区、全局区、常量区、代码区。
二、各分区介绍
栈区:是编译器自动分配和释放的。一般存放局部变量、函数参数值得。栈---系统的数据结构,先进先出。
分配方式:分为静态分配和动态分配
静态分配:编译器完成,局部变量的分批额。
动态分配,alloc函数完成。
堆区:是程序员分配和释放。顺序随意,有点灵活方便。
分配方式:只有动态分配的堆,
全局区:static全局变量和静态变量。初始化的全局变量和静态变量,
全局区分为:未初始化的全局区,int a;未初始化,int a = 10;已经初始化。
常量区,存放常量字符串,程序结束由程序执行。
代码区:存放二进制代码。
三、栈和堆的区别
管理方式:
1.栈区是由编译器自动分配和释放。
2.堆区是程序员分配和释放。
申请效率:
1.栈区,由系统自动分配,速度较快,但程序员无法控制。
2.堆区,由alloc分配内存,一般慢,产生内存碎片。
分配方式
1.栈区:2种分配方式,静态分配和动态分配,静态分配编译器完成,:局部变量,动态分配是alloc函数进行分配,不需要程序员实现。
2.堆区:没有静态分配的堆,只有动态分配。
申请大小:
1.栈区:是向低地址扩展的数据结构,是一块连续的内存区域,栈顶地址和栈的容量是由系统分配,大小为2M,如果申请的空间大于栈剩余空间,将提示栈溢出。
2.堆区:是向高地址扩展的数据结构,是不连续的内存区域,大小受计算机中有效的虚拟内存,比较灵活。