2012-02-25 70 views
0

在C和C++中,假设我没有使用智能指针或任何其他奇怪的垃圾收集机制,程序退出时内存是否会被释放(垃圾回收)?程序退出后,C/C++中的对象是否会收集垃圾回收?

+4

这不是垃圾收集。但是,当进程终止时,分配给进程的任何内存都将被回收。 – Joe 2012-02-25 00:23:56

+3

这是一个关于操作系统的问题,而不是编程语言 – 2012-02-25 00:25:21

+3

智能指针不是一个“怪异的垃圾收集机制”。相反,它们是一种* clean *机制,不会产生任何垃圾! – 2012-02-25 00:25:25

回答

1

是的,当你的程序退出时,你没有释放的任何内存将被操作系统自动释放。这意味着通常可以随时拨打exit(),尽管您需要注意其他未自动释放的资源,例如Windows上的全局原子和命名管道等。

+5

由* most *操作系统。 C标准中没有任何内容说明OS /必须/在你之后清理。 – tangrs 2012-02-25 00:25:39

+0

除了当你的程序运行W/O操作系统,是一个操作系统或是一个内核驱动程序... :-) – 2012-02-25 00:25:59

+0

@tangrs:谁给了一个关于这方面标准说的冰淇淋?实用。 – 2012-02-25 00:26:38

3

在几乎所有平台上,进程所拥有的所有资源都由进程退出时的操作系统(某些共享资源,例如SYSV-IPC,不能承受)来恢复。

1

内存在C++中根本不会收集垃圾,因为析构函数不会运行等。但是,作为清理程序退出时的一部分,它将释放任何内存或其他资源由程序使用。其他资源可能是锁,共享内存,网络连接,文件句柄等

1

这不是在C.

指定的C标准没有提到这一点,但普通的OS解除分配的内存为您服务。

7

当进程终止时,操作系统会删除已分配给它的虚拟内存。

由于其地址空间的整体消失,所以其中的所有对象也会消失。

但是,这与C++垃圾收集不同:没有调用析构函数。内存只是......悄悄地返回到操作系统。

+0

+1表示它不是垃圾回收。 – 2012-02-25 00:25:36