【问题标题】:In dynamic memory allocation, after the program terminates and one forgets to deallocate the memory, will that memory stay allocated?在动态内存分配中,在程序终止并且忘记释放内存后,该内存会保持分配状态吗?
【发布时间】:2012-05-19 10:07:21
【问题描述】:

一直在阅读 C++ 书籍,但我似乎找不到答案。我所知道的是动态内存分配,例如当我创建一个函数时:

void memoryleak(){
int * ptr = new int; 
}

它分配一个内存并将该内存返回给指针,但是,由于指针是一个局部变量,在 memoryleak() 之后,包含内存引用的指针被释放,因为它是静态的,因此分配了内存丢失,不能再用于程序。

但这是否意味着内存永远丢失或仅在程序终止之前,就像编译这段代码后sn-p:

main(){
int * ptr = new int; 
}

程序终止后,内存是继续分配还是释放?如果它保持分配状态,重新启动 PC 是否会使 PC 释放所有使用的内存?出于好奇,另一个关于他们使用的内存(在分配中)的问题是 RAM 吗? :)

【问题讨论】:

  • 请选择您最喜欢的答案并接受它。对您的其他问题也这样做。见faq

标签: c++ dynamic


【解决方案1】:

答案取决于你问谁。就 C++ 语言而言,内存只是丢失了。没有办法找回它。

但是任何合理的操作系统都足够聪明,可以知道哪些内存分配给了哪个进程,并且当一个进程终止时,它会回收所有内存。

所以在实践中,答案是只要进程存在,内存就会泄漏。之后,操作系统会将其全部收集起来,并准备在其他地方重复使用。

当然,这就是常见的主流操作系统(如 Windows、Linux 或 OSX)的行为方式。一个足够原始的操作系统可能不会这样做。

【讨论】:

  • 原始操作系统:就像那些使用嵌入式设备的操作系统。
【解决方案2】:

进程终止后,所有资源都被回收。这包括地址空间、调度原语等。

【讨论】:

    【解决方案3】:

    当程序终止时,操作系统将收回进程分配的所有内存。一旦程序终止,您在程序生命周期中泄漏的任何内存都将返回到可用内存池中。

    当您使用new 分配内存时,这将由RAM 支持。如果您分配的内存超出可用内存,则计算机可能会使用您磁盘上的交换文件。

    【讨论】:

      【解决方案4】:

      当程序终止时,程序占用的所有内存都会释放给操作系统,所以no,内存不会丢失。当您的程序完成时,内存将可供其他人使用。

      出于好奇,另一个关于他们使用的内存(在分配中)的问题是 RAM 吗?

      是的,内存是 RAM。

      【讨论】:

        猜你喜欢
        • 2011-10-07
        • 2011-03-17
        • 1970-01-01
        • 1970-01-01
        • 2013-01-27
        • 2013-11-22
        相关资源
        最近更新 更多