一直在阅读C ++书籍,但我似乎无法找到答案。我所知道的是动态内存分配,例如当我创建函数时:
void memoryleak(){
int * ptr = new int;
}
它分配一个内存并将该内存返回给指针,但是,由于指针是一个局部变量,在memoryleak()之后,包含内存引用的指针被释放,因为它是静态的,因此分配的内存丢失,无法重用于程序。
但这是否意味着内存永远丢失,或者直到程序终止,就像编译此代码片段一样:
main(){
int * ptr = new int;
}
程序终止后,内存是否会被分配或取消分配?如果它保持分配状态,重新启动PC是否会使PC解除分配所有已用内存?出于好奇,关于他们使用的内存(在分配中)的另一个问题是RAM吗? :)
答案 0 :(得分:4)
答案取决于你问的是谁。就C ++语言而言,内存就会丢失。没有办法让它回来。
但是任何合理的操作系统都足够聪明,可以知道已经为哪个进程分配了内存,当进程终止时,它会回收所有内存。
所以在实践中,答案是只要进程存在,内存就会泄漏。之后,操作系统将其全部挖掘出来,并准备在其他地方重复使用。
当然,这是Windows,Linux或OSX等主流操作系统的常见行为。一个足够原始的OS可能不会这样做。
答案 1 :(得分:4)
在进程终止后,将回收所有资源。这包括地址空间,调度原语等。
答案 2 :(得分:2)
当程序终止时,操作系统将重新声明进程分配的所有内存。在程序终止后,您在程序生命周期中泄漏的任何内存都将返回到可用内存池中。
当您使用new
分配内存时,这将由RAM
支持。如果分配的内存多于可用内存,则计算机可能会使用磁盘上的交换文件。
答案 3 :(得分:1)
当程序终止时,程序声明的所有内存都会释放到操作系统,因此否,内存不会丢失。当您的程序完成后,内存将可供其他人使用。
出于好奇,另一个关于他们使用的内存(在分配中)的问题是RAM吗?
是的,内存是RAM。