如果操作系统未清除内存泄漏,则在程序完成后内存泄漏是否仍然存在?
Do memory leaks persist after program completion if the OS does not clear it?
我的问题是泄漏的内存如何标记为"正在使用"。 根据我的理解,每个程序都会获得一个连续的内存块来满足其所有内存需求(堆栈、堆、只读、程序内存(。我想一旦程序完成,所有这些都将被释放(freed = open 供新程序使用(。现在,即使程序中有内存泄漏,当程序内存块被释放时,它不会自动释放吗?
我遇到了一些关于这个问题的问题,这些问题说操作系统必须释放它,但在某些较旧的操作系统版本中,这不会发生。鉴于第一段提供的解释,我不明白为什么这会是一个问题。此外,没有人谈论"释放"实际上意味着什么/做什么。
对于现代操作系统,进程不会分配物理内存。它们分配由物理内存支持的地址空间。当进程终止时,其地址空间将不再存在。
操作系统很久以前确实允许进程分配物理内存。在这些情况下,未能释放物理内存将导致物理内存永久丢失。
我的问题是泄漏的内存如何标记为"正在使用"。根据我的理解,每个程序都会获得一个连续的内存块来满足其所有内存需求(堆栈、堆、只读、程序内存(。
是的,它获得一个连续的虚拟内存块。此虚拟内存根据需要由物理内存提供支持。
我想一旦程序完成,所有这些都将被释放(freed = open 供新程序使用(。
是的,但不是。是的,一切都被释放了。不,它不开放供新程序使用,因为一个程序不可能消耗另一个进程的虚拟内存,因为每个进程都有自己的虚拟内存空间。
现在,即使程序中有内存泄漏,当程序内存块被释放时,它不会自动释放吗?
这不重要。虚拟内存不是稀缺资源。它是否被释放并不重要。但是,重要的是,支持该虚拟内存的任何物理内存将不再支持它,因为虚拟内存不再存在。这样可以释放物理内存以用于其他目的。
我遇到了一些关于这个问题的问题,这些问题说操作系统必须释放它,但在某些较旧的操作系统版本中,这不会发生。鉴于第一段提供的解释,我不明白为什么这会是一个问题。
一些较旧的操作系统甚至没有虚拟内存支持。有些具有直接分配物理内存的内存分配功能。
此外,没有人谈论"释放"实际上意味着什么/做什么。
在新式操作系统上,当它终止时,其虚拟地址空间将不再存在。这可能会导致内存的某些物理页(实际 RAM(的引用降至零,这将导致操作系统在必要时将它们重新分配给新用途。
- C++功能泄漏内存,我是C++新手,不确定如何解决
- 我的堆栈弹出式磁带的实现是否泄漏内存?
- 将 c++ 向量转换为字符 ** 而不会泄漏内存
- 析构函数 C++ 使泄漏内存
- 构造函数对象赋值是否泄漏内存
- corba :: orb_init泄漏内存
- Gmock泄漏内存
- 如何在不泄漏内存的情况下删除链接列表
- Visual C ODBC关闭记录集泄漏内存
- 为什么泄漏内存比在动态数组上执行 delete[] 慢
- OpenGL正在泄漏内存.哪个对象未释放
- 可以std ::退出泄漏内存
- uiautomation findall泄漏内存
- 为什么在此OpenCL代码中泄漏内存,为什么要泄漏内存
- pthread在完成后会泄漏内存
- win32 标准::线程泄漏内存
- 返回指向同一变量的指针是否会泄漏内存
- 使用clectType(new any_type())可能会泄漏内存泄漏
- Windows开发:如何确定我的应用程序是否正在泄漏内存
- WinHttp打开泄漏内存