如果虚拟环境中存在内存泄漏怎么办?

时间:2017-05-24 05:48:22

标签: c memory memory-management

我从阅读一些网络文章中了解到,就像任何其他程序一样,主机操作系统会为虚拟操作系统分配X内存量,当我在虚拟操作系统上启动任何程序时,虚拟操作系统会获取所需的确切内存量对于该计划。

当我关闭虚拟操作系统时,它会将分配的内存返回给主机操作系统。

但是如果虚拟操作系统环境中存在内存泄漏会发生什么?我开始学习C,我的教授说在动态内存分配操作中,主机操作系统中可能会发生永久性泄漏。

但是,如果它发生在虚拟环境中呢?我想程序会在关闭时分配回主机操作系统的所有内存,对吧?下次再次启动虚拟主机时会发生什么?内存泄漏是否会永久显示在那里?

在我开始用C编写第一个程序之前,只是害怕。

P上。 S.如果我使用像Repl.it这样的网站并在那里使用内存分配,它会对我的系统造成损害吗?

2 个答案:

答案 0 :(得分:3)

当您分配一些内存(在C中使用malloc)并且您永远不会释放该内存时,可能会发生内存泄漏,这可能由于多种原因而发生。

现在需要了解的重要一点是,一旦流程运行完毕,已分配的内存将被释放

设置VM时,可以设置可以使用的最大内存量。当您关闭VM时,它也将被释放。

你不能造成永久性的"如果您编写的程序没有运行,则会导致内存泄漏。如果操作系统有一些总是正在运行的内存泄漏服务,它会在内存不足时减速,但是当你重新启动时,所有的内存都将被释放。

所以不要让这个阻止你,你不能损坏你的计算机,你可以通过退出程序来恢复它。 (或在最坏的情况下重新启动PC )

编辑:

正如评论中提到的,当你泄漏共享内存时有一个特殊情况,在这种情况下,退出程序可能不会释放内存,但我认为这是最糟糕的情况,重启也会解决这个问题。 (仍然不是永久性的)

答案 1 :(得分:1)

这个答案旨在提供一个不同的观点,除了我同意的好答案和评论。

我试图看到最糟糕的情况,即你如何得到你所害怕的方式。 您可能有一个与以下假设不匹配的环境,在这种情况下,我的构造当然不适用。

  • 您的虚拟操作系统支持“持久性”
    (即你可以以“休眠”的方式关闭它,它可以从相同的运行进程和它们恢复的内存内容开始)
  • 您的虚拟化引擎还支持虚拟操作系统的持久性
  • 关闭虚拟操作系统中的持久性是可能的,因为占用大量内存的进程(完整性检查可以防止这种情况)
  • 虚拟化引擎也不介意耗尽内存并允许持久性
  • 您选择使用持续关机,
    通常重新启动虚拟操作系统将包括杀死恶意进程并回收内存(这可以通过其他答案和评论进行讨论,但感谢MrBlaise提出澄清)

在这种情况下,我想你可以:

  • 已经(并且用完)所有可用内存的过程
  • 但尚未坠毁或以其他方式触发紧急措施
  • 然后在成功关闭之前保存这种情况以保持持久性
  • 然后重新启动虚拟操作系统
  • 它恢复了之前的情况,即从hiberantion返回
  • 恢复的先前情况包含一个已经/再次运行的进程,该进程占用了所有内存

我认为这仍然只会影响虚拟操作系统,而不会影响主机。

请注意,我故意做出所有必要的假设,只是为了得到你害怕的情况。有些假设非常“大胆” 我想例如,任何支持持久性的东西都应该进行健全性检查,这至少会检测内存问题并询问如何处理。

(顺便说一下,我不知道支持持久性的虚拟化引擎,也不知道是否支持持久性。我正在思考通用的理论领域。
如果我发明了虚拟化引擎的持久性(不能相信它),我认为这是现有技术。 ; - ))