我在C文件中使用了内存分配代码而我没有释放它,然后文件被删除了。我的问题是:即使文件被删除而没有释放也会发生内存泄漏,知道包含OP的分区的内存和程序内存不足并且我已经使用了“磁盘清理”了吗?
注意:有人告诉我,一旦你重新启动计算机,动态内存中的所有内容都会消失,是真的吗?
答案 0 :(得分:4)
只要程序正在运行,内存泄漏就会继续。一旦程序退出,操作系统应该为你释放内存,即使你没有。无需从haddisk中删除任何文件。
我相信你对在磁盘和内存中存储内容之间的区别感到困惑。
例如,当您有int x = 4;
时,x
存储在RAM中。这与存储文件(如word文档)的位置不同。如果重新启动计算机,则x
将丢失。此外,当您的程序停止运行时,操作系统会清除x
占用的空间。
当一个程序泄漏内存时,它基本上占用了比实际需要更多的RAM,并且随着时间的推移,它将会膨胀。但是,一旦程序停止运行,操作系统就会清除它,因为它不再被使用。没有永久性的影响。
答案 1 :(得分:0)
是的,从FS中删除文件与您的C程序将看到的内容无关。任何未释放的malloc都会在程序终止时释放。仅供参考,在不了解这些基础知识的情况下编写C代码有点危险,您可能想要阅读或尝试像python甚至java这样的东西,这些东西会先隐藏这些责任。
但是你应该理解堆栈,堆,虚拟内存和i / o,并通过值传递和传递引用(指针)来开始在C中生效。了解缓冲区溢出是什么。有很多东西需要学习。
答案 2 :(得分:0)
当程序终止时,操作系统将释放它分配给程序的所有资源。在您的情况下,内存泄漏将在程序的已分配内存中,并在完成后,操作系统将回收所有“泄露”的内存。
答案 3 :(得分:0)
此外,您还应注意,在多进程环境中分配内存并且不释放内存并继续执行时,会导致系统性能严重下降严重。这使得其他进程可以减少用于分配的内存,因为您的进程将占用内存并且不会释放它。 因此,它始终建议在使用后释放内存。我们不应该等到过程完成执行。