我在一个C文件中使用了内存分配代码,但是没有释放它,然后这个文件被删除了。我的问题是:在知道包含操作和程序的分区的内存不断耗尽,并且我已经使用了“磁盘清理”的情况下,即使在没有释放的情况下删除文件也会发生内存泄漏吗?
注:有人告诉我,一旦我重新启动计算机,动态内存中的所有内容都将消失,是真的吗?
发布于 2010-07-15 01:13:52
只有在程序运行时,内存泄漏才会继续。一旦程序退出,操作系统应该为你释放内存,即使你没有这样做,也不需要从你的硬盘上删除任何文件。
我相信您对在磁盘上存储和在内存中存储之间的区别感到困惑。
例如,当您有int x = 4;时,x存储在内存中。这与您的文件(如word文档)的存储位置不同。如果重新启动计算机,此x将丢失。此外,当您的程序停止运行时,操作系统会清理x占用的空间。
当程序泄漏内存时,它基本上占用了比实际需要更多的RAM,并且随着时间的推移,它的大小会膨胀。但是,一旦程序停止运行,操作系统就会将其全部清除,因为它不再被使用。没有永久性的影响。
发布于 2010-07-15 01:17:43
是的,从文件系统中删除该文件与您的C程序将看到的内容无关。任何没有被释放的malloc都会在程序终止时被释放。仅供参考,在不了解这些基础知识的情况下编写C代码是有点危险的,你可能想要做一些阅读,或者尝试一些像python甚至java这样的东西,它们会首先对你隐藏这些责任。
但是你应该了解堆栈、堆、虚拟内存和i/o,以及按值传递和按引用传递(指针),才能开始在C中有效。了解什么是缓冲区溢出。有很多东西需要学习。
发布于 2010-07-15 01:22:08
当程序终止时,操作系统将释放它分配给该程序的所有资源。在您的例子中,内存泄漏将在程序分配的内存内,在它完成后,操作系统将回收所有“泄漏”的内存。
https://stackoverflow.com/questions/3248658
复制相似问题