Thi*_*Guy 5 python documentation memory-management python-3.x
我想说清楚,我没有看到这个问题描述的行为。相反,我的问题是关于问题本身:
该蟒蛇3官方FAQ说,这逐字:
为什么 CPython 退出时没有释放所有内存?
并提供了这个答案:
当 Python 退出时,从 Python 模块的全局命名空间引用的对象并不总是被释放。如果存在循环引用,则可能会发生这种情况。还有一些由 C 库分配的内存是不可能释放的(例如,像 Purify 这样的工具会抱怨这些)。然而,Python 在退出时会积极清理内存,并且确实会尝试销毁每个对象。
如果你想强制 Python 在释放时删除某些东西,请使用atexit模块运行一个函数来强制这些删除。
假设一个托管内存操作系统(Linux、Mac、Windows、GNU、BSD、Solaris...),这听起来完全是胡说八道。
在程序退出时(无论是 Python 还是其他任何东西),它从操作系统请求的任何内存都被释放(因为操作系统可以控制虚拟页表等)。该程序不必取消分配或解构任何东西(程序过去必须做的事情,正如有人使用哈希表解构cp遇到瓶颈时所强调的那样),但我认为没有任何操作系统' Python 3 支持对程序提出了这个要求。
这在我不知道的某些情况下有意义吗?这是指什么?
FAQ只是说cpython本身不会主动释放它在终止时获得的所有内存
如果您在任何正常的服务器/桌面操作系统上运行 cpython,当它退出时释放进程的所有内存,那么内存泄漏就没有问题。当进程退出时,操作系统负责释放所有内存。
常见问题解答更多地是为了通知您,cpython 不会在使用 malloc() 或类似方法分配的所有内存上调用 free() 或类似方法。如果在进程退出时不释放进程获取的所有内存的操作系统上运行 cpython,这可能会产生后果(这些操作系统存在,尤其是许多嵌入式内核的情况)。如果您在内存分析器/泄漏检测器下运行 cpython,该检测器可能会将未释放的内存 () 报告为泄漏。
在两种情况下这可能是有意义的。
首先,在 Python 上运行内存泄漏分析器将报告 Python 退出时尚未显式释放的内存,因为它表明存在泄漏,即使操作系统已清除了所有内存。
其次,Python 被设计为嵌入到其他程序中,在这种情况下,Python 可能会关闭(甚至重新启动),而整个过程不会结束。在整个进程结束之前,操作系统不会清理Python的内存。请参阅在另一个应用程序中嵌入 Python 的教程以及Python C API 文档。
| 归档时间: |
|
| 查看次数: |
2051 次 |
| 最近记录: |