iOS栈区 堆区等概念以及区别

栈区 (stack)

栈通常来讲都是一个先进后出的队列,后进入的数据,会被先释放掉.栈区存放函数内的局部变量,形参和函数返回值.栈区的内存由系统自动管理释放,内存的分配是连续的,且分配的内存地址是向下增加.申明的变量过了做用域范围后内存便会自动释放,不须要开发人员手动管理. 数据结构

栈区分配的内存地址向下增加

堆区 (heap)

堆通常是个链表或者树结构,不一样语言有不一样实现,相对而言复杂的多.堆区通常由开发人员手动管理(malloc()函数申请),若是开发人员没有手动释放(free()),容易形成内存泄漏,只有程序结束时由系通通一回收.堆区在内存中的分布是不连续的,是由不一样区域的内存块经过指针连接.函数

总结

从上面能够看出,栈区内存由系统自动分配,速度较快,可是没法由开发人员控制.相比较而言,堆区有着更好的动态分配性能,可是通常存放在堆区的每每数据结构更加复杂,会致使操做的成本远远大于栈区,效率比栈区低性能

代码区

存放函数的二进制代码,代码区的内存是由系统控制指针

静态区(static)

静态区存放全局变量和静态变量,内存在程序结束后由系通通一释放code

常量区

常量区存放常量字符串,也是在程序结束后由系统释放内存cdn

相关文章
相关标签/搜索