栈通常来讲都是一个先进后出的队列,后进入的数据,会被先释放掉.栈区存放函数内的局部变量,形参和函数返回值.栈区的内存由系统自动管理释放,内存的分配是连续的,且分配的内存地址是向下增加.申明的变量过了做用域范围后内存便会自动释放,不须要开发人员手动管理. 数据结构
堆通常是个链表或者树结构,不一样语言有不一样实现,相对而言复杂的多.堆区通常由开发人员手动管理(malloc()函数申请
),若是开发人员没有手动释放(free()
),容易形成内存泄漏,只有程序结束时由系通通一回收.堆区在内存中的分布是不连续的,是由不一样区域的内存块经过指针连接.函数
从上面能够看出,栈区内存由系统自动分配,速度较快,可是没法由开发人员控制.相比较而言,堆区有着更好的动态分配性能,可是通常存放在堆区的每每数据结构更加复杂,会致使操做的成本远远大于栈区,效率比栈区低性能
存放函数的二进制代码,代码区的内存是由系统控制指针
静态区存放全局变量和静态变量,内存在程序结束后由系通通一释放code
常量区存放常量字符串,也是在程序结束后由系统释放内存cdn