c++堆内存分配/释放
c++ heap memory allocation/deallocation
如果我在堆上声明一些东西,比如char *a=new char[1000]
,主程序停止,如果没有delete[]
调用,分配的内存会发生什么?它保留在堆上还是自动释放?
就c++而言,将会发生什么完全没有定义。然而,几乎任何合理的操作系统都会在进程终止时清理它所分配的内存。然而,在你吃完饭后清理是一个很好的习惯。
c++标准在您从main()
返回后不久指定"结束"-它确实解释了全局对象在此之后的某个点被销毁,atexit()
和其他一些"我们正在退出"级别的函数也在main
返回后运行。但是,程序所在的内存发生了什么情况,并没有由c++标准指定。这同样适用于堆的内容。
如果系统中有操作系统,则由操作系统来清除应用程序(c++也没有指定必须有操作系统)。
正常情况下会被操作系统清除。
当您的应用程序崩溃或由于任何原因被终止时,操作系统在正常情况下会回收内存。但是,这是没有定义的
相关文章:
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 调用析构函数以释放动态分配的内存
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 错误:malloc:对象 0x7f9edf504080 的 *** 错误:未分配正在释放的指针
- 给定一个指向堆分配内存的指针,智能指针实现如何为其找到合适的释放函数?
- 是否可以使用分配器对象来释放另一个分配器分配的内存?
- 释放动态分配的内存时是否需要执行此额外步骤
- 整数内存分配/释放
- 我是否需要在 c++ 中从本地指针中释放分配的内存?
- 释放分配给大量矢量的内存的最有效方法是什么?
- 为什么要在释放分配给该对象的内存之前调用该对象的默认析构函数?
- 在崩溃时释放分配的指针的正确方法
- 为什么要正确释放分配的内存
- 如何在C++中释放分配的静态值
- 删除链表中的节点后释放分配的空间
- 是否可以从C++释放分配的内存输出
- 释放分配给二维向量的内存
- 如何释放分配的参数
- 从数组中移除一个元素并释放分配给它的内存
- 我可以在glTexImage2D调用后释放分配给图像的内存吗?