前言
- 于过往的理解~结合网上的概述 成就此文!
To travel is better than to arrive.
路途之美,远甚终点。
栈内存
- 由程序(编译器)自动分配内存;
- 是一块连续的内存;
存放基本数据类型;
- 存取顺序:先进后出;
- 存储量相对较小 1~2M,自由度小 (基本数据类型?你还想干嘛?);
- 使用完,自动销毁;
堆内存
- 由程序员手动分配内存;
存放引用数据类型(对象和数组);
以数组为例:var a=[ 1,2,3 ];(将右边的数组,赋值给左边的变量);
* 程序将左边的变量a~存储在栈空间;
* 程序将右边的数组 [1,2,3]作为实体~存储在堆内存;
* 此时,我们肯定想知道这个数组在堆中的具体存储位置,对吧?
* “内存地址” 就是数组在堆内存中的~存储位置;
* 最后,数组的“内存地址”指向(赋值)变量a,从此我们通过数组的“内存地址”~~去操控数组。
- 顺序随意;
- 存储量相对大一点,自由度大一点(我数组里放对象,反之我还能来…);
- 不连续的内存区域;
- 需要程序员自己销毁或不定时间后GC~系统垃圾回收掉;
写在最后
- 上文,若有疏漏和问题,欢迎指正~