在动态内存分配中,在程序终止并且忘记释放内存之后,该内存是否会保持分配状态?

时间:2012-05-19 10:07:22

标签: c++ dynamic

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

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

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

但这是否意味着内存永远丢失,或者直到程序终止,就像编译此代码片段一样:

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

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

4 个答案:

答案 0 :(得分:4)

答案取决于你问的是谁。就C ++语言而言,内存就会丢失。没有办法让它回来。

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

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

当然,这是Windows,Linux或OSX等主流操作系统的常见行为。一个足够原始的OS可能不会这样做。

答案 1 :(得分:4)

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

当程序终止时,程序声明的所有内存都会释放到操作系统,因此,内存不会丢失。当您的程序完成后,内存将可供其他人使用。

  

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

是的,内存是RAM。