01 内存溢出
定义:你要求分配的内存超出了系统能分配的,系统不能满足,于是产生溢出。
02内存泄露
定义:你向系统申请分配内存进行使用,可是使用完成以后却不归还,结果你申请的那块内存你自己也不能访问了,而系统也不能再次将它分配给需要的程序。
内存泄漏可能导致程序运行变慢、耗尽可用内存,甚至导致程序崩溃。
内存泄漏堆积的后果就是内存溢出。
03堆栈溢出
定义:产生是由于过多的函数调用,导致使用的调用堆栈大小超过事先规划的大小,覆盖其他存储器内的资料,一般在递归中产生。
栈
- 栈是一种线性数据结构,最后进栈的元素最先出栈;
- 用于存储函数调用的信息、局部变量以及函数的返回地址;
- 栈的操作是高效的,因为它只涉及到两个基本操作:压栈和弹栈。
堆
1、 堆事一种动态分配的内存区域,用于存储程序运行时需要在编译时未知大小的数据;
2、 在堆上分配的内存需要手动管理当不再需要时,需要程序员负责释放这块的内存,否则可能导致内存泄露。
3、堆的分配和释放操作相对较慢,因为需要进行复杂的内存管理。