栈内存
栈内存存放基本类型变量,复杂数据类型的引用和方法(函数)的调用,遵循先入后出的原则
看下面这段代码:
1 | function foo() { |
上述代码中函数体入栈顺序为:fn->foo
出栈顺序为:foo->fn
栈内存特点:
连续的内存区域
栈内存与堆内存相比非常小,存取速度比较快
系统自动分配和释放,例如函数参数、局部变量、临时变量等
栈内存里的数据可以共享
栈内存里的数据大小和生命周期是确定的,缺乏灵活性
堆内存
堆内存不等于数据结构里的堆,其分配方式类似于链表
堆内存分配过程:
操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中
堆内存特点:
不连续的内存区域
一般由开发人员申请和释放
堆内存获取的空间比较灵活,比较大
存取速度比较慢,比较容易产生内存碎片