概述
是程序用来存储数据的两个内存区域
栈
栈是一个内存数组,是一个LIFO(Last-In First-Out,先进先出)的数据结构。
由系统自动分配释放
数据类型
栈存储的数据类型
- 某些类型变量的值
- 程序当前的执行环境
- 传递给方法的参数
例
int b;
char s[] = "abc";
char *p2;
栈特征
- 数据只能从栈的顶端插入和删除
- 把数据放到栈顶称为入栈(push)
- 从栈顶删除数据称为出栈(pop)
栈的内存
内存地址由高到底,后定义的变量地址低于先定义的变量
如上面代码,b的地址小于s的地址,b在s的下面
堆
堆一块内存区域,在堆中可以分配大块的内存用于存储某类型的数据对象,栈内存能够以任意顺序存入和移除。
由开发人员分配和释放,若开发人员不主动释放,则程序结束由系统回收。
分配方式类似链表
例
//C中使用malloc()函数申请
char *p1 = (char *)malloc(10);
//free()函数释放
free(p1);
//C++中用new运算符申请
char *p2 = new char[10];
//用delete运算符释放
delete[] p2;
栈的内存
堆的内存地址与栈相反,由低到高,需要注意的是,后申请的内存空间不一定在先申请的内存后面
垃圾回收
堆里保存的数据,不能显示的删除它们,由垃圾收集器(GarbageCollector GC)来判断是否还在使用,自动清除无用的堆对象