C++ 内存管理(四)--栈静态变量和局部变量、堆delete\new动态
2016-08-24 10:03
274 查看
自动存储、静态存储和动态存储
根据用于分配内 的方法,C++有3种管理数据内
的方式:自动存储、静态存储和动态存储(有时也叫作自由存储空间或堆)。在
在时间的长短方面,以这3种方式分配的数据对象各不相同。
栈、堆和内存泄漏
如果使用new运算符在自由储空间(或堆)上创建变量后,没有调用delete,将发生什么情况呢?如果没有调用delete,則即使包含指针的
内存由于作用域规则和对象生命周期的原因而被释放,在自由
储空间上动态分配的变量或结构也将继续存在。实际上,将会无法访问自由储空间中的结构,因为指向这些内
的指针无效。这将导致内存泄漏。被泄漏的内存将在程序的整个生命周期内都不可使用;这些内存被分配出去,但无法收回。极端情况(不过不常见)是,内存泄漏可能会非常严重,以致于应用程序可用的内存被耗尽,出现内存耗尽错误,导致程序崩溃。另外,这种泄漏还会给一些操作系统或在相同的内存空间中运行的应用程序带来负面影响,导致它们崩溃。
根据用于分配内 的方法,C++有3种管理数据内
的方式:自动存储、静态存储和动态存储(有时也叫作自由存储空间或堆)。在
在时间的长短方面,以这3种方式分配的数据对象各不相同。
栈、堆和内存泄漏
如果使用new运算符在自由储空间(或堆)上创建变量后,没有调用delete,将发生什么情况呢?如果没有调用delete,則即使包含指针的
内存由于作用域规则和对象生命周期的原因而被释放,在自由
储空间上动态分配的变量或结构也将继续存在。实际上,将会无法访问自由储空间中的结构,因为指向这些内
的指针无效。这将导致内存泄漏。被泄漏的内存将在程序的整个生命周期内都不可使用;这些内存被分配出去,但无法收回。极端情况(不过不常见)是,内存泄漏可能会非常严重,以致于应用程序可用的内存被耗尽,出现内存耗尽错误,导致程序崩溃。另外,这种泄漏还会给一些操作系统或在相同的内存空间中运行的应用程序带来负面影响,导致它们崩溃。
float *f = new float(10.0f); //分配内存,初始值10 float *f2 = new float[10]; //分配内存,十个float数组 float *f3 = new float; //分配内存 delete f; delete [] f2; delete f3;
相关文章推荐
- C++中的内存管理(new、delete、内存泄漏)
- new、delete、指向连续空间的指针、数组、空间释放、空间申请[C++][内存管理]
- C++中的内存管理——关于new和delete的讨论
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- C++内存管理基础之new & delete
- 温习:C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- C++ 全局变量、局部变量、静态全局变量、静态局部变量的区别
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- C++程序运行时内存布局之----------局部变量,全局变量,静态变量,函数代码,new出来的变量
- C++内存管理基础之new & delete
- C++中的内存管理(new、delete、内存泄漏)
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- C++中RTTI动态类型识别、静态成员、变量的四种存储方式
- C++内存管理基础之new & delete
- [转]C++中的内存管理(new、delete、内存泄漏)
- C++中的内存管理(new、delete、内存泄漏)
- C/C++——全局变量、局部变量、静态全局变量和静态局部变量
- C++程序运行时内存布局之----------局部变量,全局变量,静态变量,函数代码,new出来的变量
- C/C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别