如果我直接停止调试,内存是否会被释放?

5

我想知道,假设我正在调试一段代码,在某个时刻我分配了一些内存,然后断点命中了,例如:

1: Statement to allocate 1 MB memory in **C**.
2: Any other statement where **BREAKPOINT HIT**.  

现在我的问题是:

  1. 如果我直接使用任务管理器杀死我的IDE(如Visual Studio),那么分配的内存和资源是否会被释放。
  2. 如果我停止调试,那么分配的内存和资源是否会被释放。

如果是的话,我该如何确认内存和资源是否已经被释放。


什么操作系统?基于NT的操作系统是,其他Windows版本...不确定/取决于资源类型。 - joy
基于NT的操作系统Windows XP。 - Bharat Sharma
1个回答

4
在现代操作系统中,当程序终止时,您的程序的所有内存都将返回给系统,无论哪种情况下都会发生这种情况。在某些嵌入式系统上可能不会发生这种情况,但您不会在这些系统上运行IDE。
对于除内存以外的其他资源(例如打开的文件、设备等),操作系统通常会回收所有资源(除非它们仍被其他进程使用),但是对于某些系统和某些资源,在某些条件下,资源可能会丢失或锁定(应将其视为操作系统或设备驱动程序中的错误)。
至于确定系统是否实际释放了内存,可能很困难,因为系统将内存分配给缓冲区和交换区,并不一定具有可检查的空闲空间计数。对于其他资源...如果您无法获取它们,则它们就没有被释放。

2
@BharatSharma 不,内存泄漏发生在程序运行时。就像我说的那样,当程序终止时,系统会回收所有内存。 - Jim Balter
但我发现在Android和Microsoft XP中都存在。 - Bharat Sharma
@BharatSharma,你需要更具体地描述你要解决的问题。从你所说的来看,我觉得你的问题与内存泄漏无关,你正在错误的方向上寻找答案。在Android和Windows XP上,当进程终止时,内存会被释放。 - avakar
我正在谈论C和C ++。假设我正在运行任何代码并分配了一些内存。现在,在释放它之前,我停止了IDE。根据您的说法,所有内存应该返回到操作系统。因此,只要进程停止(根据您的说法),它就会返回。您告诉我“内存泄漏发生在程序运行时”。如果程序运行,则进程也会启动。如果我直接停止进程,那么它应该将资源返回到操作系统。如果是这种情况,则不应发生内存泄漏,但仍然会发生内存泄漏。因此,我的问题再次出现在同一点上。我只想知道这些概念。 - Bharat Sharma
1
@JimBalter:在基于NT的Windows版本中,当附加的调试器死亡时,进程也会死亡。由于两者的状态相互交织,Windows无法继续运行它们。 - MSalters
显示剩余17条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接