c++堆内存分配/释放

c++ heap memory allocation/deallocation

本文关键字:释放 分配 内存 c++      更新时间:2023-10-16

如果我在堆上声明一些东西,比如char *a=new char[1000],主程序停止,如果没有delete[]调用,分配的内存会发生什么?它保留在堆上还是自动释放?

就c++而言,将会发生什么完全没有定义。然而,几乎任何合理的操作系统都会在进程终止时清理它所分配的内存。然而,在你吃完饭后清理是一个很好的习惯。

c++标准在您从main()返回后不久指定"结束"-它确实解释了全局对象在此之后的某个点被销毁,atexit()和其他一些"我们正在退出"级别的函数也在main返回后运行。但是,程序所在的内存发生了什么情况,并没有由c++标准指定。这同样适用于堆的内容。

如果系统中有操作系统,则由操作系统来清除应用程序(c++也没有指定必须有操作系统)。

正常情况下会被操作系统清除。

当您的应用程序崩溃或由于任何原因被终止时,操作系统在正常情况下会回收内存。但是,这是没有定义的