1

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

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

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

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

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

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

4

4 回答 4

4

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

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

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

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

于 2012-05-19T10:25:35.687 回答
4

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

于 2012-05-19T10:29:37.133 回答
2

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

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

于 2012-05-19T10:09:06.900 回答
1

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

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

是的,内存是RAM。

于 2012-05-19T10:09:00.397 回答