C++程序在崩溃时会自动释放内存吗?

C++程序在崩溃时会自动释放内存吗?

问题描述:

我在谷歌C++编码标准中读到Google不使用异常。如果不使用异常,当程序中发生错误时,如何释放内存?例如,f()调用g(),并且如果g()中有错误,我应该释放在g()中分配的所有内存,然后调用f()的异常。一旦f()捕获到异常,f()将释放f()中分配的所有内存并退出程序。C++程序在崩溃时会自动释放内存吗?

如果没有使用异常,并且如果g()中有错误,我可以强制退出exit(0),并且C++程序是否足够聪明以释放分配的所有内存?我的猜测是,由于C++维护堆栈和堆,并且一旦程序退出,C++将自动释放堆栈和堆?

+5

这是通常回收内存的操作系统。 –

+2

好,如果整个过程崩溃了,那么是的,内存被os释放。无论程序是用什么语言编写的。 – clamp

+0

可以说,如果你禁止异常,声称C++是有点欺骗性的。这就像给你的司机开一辆车,但只有在他不使用燃油的情况下。 –

由于某种原因,进程终止时,操作系统会清理所有用过的内存和文件句柄。

我听说有些内存类型,如在Windows上,COM全局堆内存不能为您释放。但是,大多数内存/句柄已被清理,因为操作系统必须处理应用程序崩溃的情况。你当然可以在进程本地内存和大多数句柄(如文件句柄等)的情况下保证它。在一般情况下,你可以假定当你的应用程序退出时,操作系统将在你之后清理。

此外,永远不要遵循Google的风格指南。它不适用于C++,它适用于C++,减去为了制作C而必须带走的所有内容。它可能适用于Google(可疑地),但它绝对不适用于其他人。