在C和C++中,假设我没有使用智能指针或任何其他奇怪的垃圾收集机制,程序退出时内存是否会被释放(垃圾回收)?程序退出后,C/C++中的对象是否会收集垃圾回收?
回答
是的,当你的程序退出时,你没有释放的任何内存将被操作系统自动释放。这意味着通常可以随时拨打exit()
,尽管您需要注意其他未自动释放的资源,例如Windows上的全局原子和命名管道等。
由* most *操作系统。 C标准中没有任何内容说明OS /必须/在你之后清理。 – tangrs 2012-02-25 00:25:39
除了当你的程序运行W/O操作系统,是一个操作系统或是一个内核驱动程序... :-) – 2012-02-25 00:25:59
@tangrs:谁给了一个关于这方面标准说的冰淇淋?实用。 – 2012-02-25 00:26:38
在几乎所有平台上,进程所拥有的所有资源都由进程退出时的操作系统(某些共享资源,例如SYSV-IPC,不能承受)来恢复。
内存在C++中根本不会收集垃圾,因为析构函数不会运行等。但是,作为清理程序退出时的一部分,它将释放任何内存或其他资源由程序使用。其他资源可能是锁,共享内存,网络连接,文件句柄等
这不是在C.
指定的C标准没有提到这一点,但普通的OS解除分配的内存为您服务。
当进程终止时,操作系统会删除已分配给它的虚拟内存。
由于其地址空间的整体消失,所以其中的所有对象也会消失。
但是,这与C++垃圾收集不同:没有调用析构函数。内存只是......悄悄地返回到操作系统。
+1表示它不是垃圾回收。 – 2012-02-25 00:25:36
- 1. 垃圾收集器如何确定对象是否是垃圾?
- 2. 垃圾收集对象
- 3. 指向null的JavaScript链对象是否会被垃圾收集?
- 4. ParameterizedThreadStart是否保证对象实例不会被垃圾收集?
- 5. 垃圾收集器在收集死对象时会做什么?
- 6. 程序退出后,CRITICAL_SECTION对象是否被回收?
- 7. 这会收集垃圾吗?
- 8. Android的垃圾收集对象
- 9. PHP中是否有垃圾回收?
- 10. 回收垃圾收集代表
- 11. 内部对象的垃圾回收
- 12. Ruby:标记垃圾回收的对象
- 13. 有资格垃圾回收的对象
- 14. 垃圾收集资格对象
- 15. 如何跟踪垃圾收集对象
- 16. Scala对象何时收集垃圾?
- 17. Java垃圾收集和大对象
- 18. 对象没有垃圾收集
- 19. ActiveX对象和.NET垃圾收集器
- 20. nodejs垃圾回收输出
- 21. 活物是垃圾收集?
- 22. 垃圾收集 - 是否需要?
- 23. 垃圾收集器是否有配置?
- 24. 垃圾收集是否影响堆栈?
- 25. 是否收集了客观C垃圾?
- 26. GC是否从Metaspace收集垃圾?
- 27. 是否有任何不受垃圾回收处理的对象?
- 28. Java线程垃圾收集与否
- 29. 是否有可能为垃圾收集“查看”对象图?
- 30. 此COM对象是否被垃圾收集?
这不是垃圾收集。但是,当进程终止时,分配给进程的任何内存都将被回收。 – Joe 2012-02-25 00:23:56
这是一个关于操作系统的问题,而不是编程语言 – 2012-02-25 00:25:21
智能指针不是一个“怪异的垃圾收集机制”。相反,它们是一种* clean *机制,不会产生任何垃圾! – 2012-02-25 00:25:25