栈区
栈是一块连续的内存区域从从高地址向低地址进行存储,遵循先进后出(FILO)原则。
栈的地址空间在 iOS 中是以0X7开头。
栈区一般在运行时分配,内存空间由系统管理,申明的变量过了作用域范围后内存便会自动释放。
函数内部定义的局部变量、方法的参数(方法中默认参数:self、cmd),都存放在栈区
堆区
堆是不连续的内存区域从从低地址向高地址进行存储,,类似于链表结构(便于增删,不便于查询),遵循先进先出(FIFO)原则。
堆的地址空间在iOS中是以0x6开头,其空间的分配总是动态的。
开发人员需要关注变量的生命周期,如果不及时释放,会造成内存泄漏,只有等程序结束时由系统统一回收。
OC中使用alloc或者new开辟空间创建对象。
C语言中使用malloc、calloc、realloc分配的空间,需要free释放。
全局/静态区
该区是编译时分配的内存空间,在iOS中一般以0x1开头,在程序运行过程中,此内存中的数据一直存在,程序结束后由系统释放。
未初始化的全局变量和静态变量,即BSS区(.bss)。
已初始化的全局变量和静态变量,即数据区(.data)。
常量区
该区是编译时分配的内存空间,在程序运行过程中,此内存中的数据一直存在,程序结束后由系统释放。
存放常量:整型、字符型、浮点、字符串等。
代码区
该区是编译时分配的内存空间,在程序运行过程中,此内存中的数据一直存在,程序结束后由系统释放。
程序运行时的代码会被编译成二进制,存进内存的代码区域。
网友评论