- 数组和链表的区别
- 数组
地址连续,查找速度快,操作效率低
存储单元在定义时分配,元素个数固定,内存空间要求高 - 链表
地址不连续,查找速度慢,操作效率高
存储单元在程序执行时动态申请,可按需动态增减
- iOS内存分区的情况,五大区域
- 栈区
Stack
先进后出FILO
由编译器自动分配和释放
栈空间多线程不共享
连续的内存地址,由高向低分配,不会产生碎片
空间较小,运行速度较快,效率高
栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高 - 堆区
Heap
分配方式类似链表,先进先出FIFO
一般需要手动分配和释放
堆内存多线程共享
不连续的内存地址,由低向高分配,容易产生碎片
空间较大,运行速度较慢,效率不如栈
计算机底层并没有对堆的支持,堆是有C/C++
函数库提供的,加上碎片问题,导致堆的效率比栈低 - 全局区
全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域.data段
,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域.bss段
程序结束后由系统释放 - 常量区
常量字符串就