Python: CTypes的结构体内存泄漏

2024-10-01 04:57:55 发布

您现在位置:Python中文网/ 问答频道 /正文

Pythonctypes是否存在已知的内存泄漏?我正在编写一个Python脚本,其代码类似于下面的代码片段,使用ctypes,由于某种原因导致内存泄漏。本例中的“while True”用于测试调用函数所导致的泄漏。它正在使用Python 2.5.4在Windows上运行:

import ctypes
def hi():
    class c1(ctypes.Structure):
            _fields_=[('f1',ctypes.c_uint8)]
    class c2(ctypes.Structure):
            _fields_=[('g1',c1*2)]

while True:
    test=hi()

可以使用ProcessExplorer测试这个漏洞——由于它不断循环,Python会占用越来越多的内存。它似乎需要有两个结构子类,其中一个类有另一个的“倍数”(使用*运算符),但我不确定条件是否比这更基本。即使在循环中添加了del test,它仍然会泄漏内存。在

你知道是什么原因造成的吗?在

编辑:因为有人建议它可能还没有垃圾收集,下面是一个经过编辑的版本,它进行了垃圾收集,但似乎仍然泄漏内存:

^{pr2}$

Tags: 内存代码test脚本true编辑fieldshi
2条回答

这不是内存泄漏,这只是意味着垃圾回收器还没有运行。即使垃圾回收器确实在运行,也很可能存在某种内存池。在

ProcessExplorer不是一个好的调试工具,尤其是对于内存。在

脚本本身不会泄露。使用gc.set_debug(gc.DEBUG_LEAK)运行表明所创建的结构类型是可收集的,并且gc.garbage在每次循环迭代中都保持为空,因此没有不可回收的对象。在Linux系统上运行带有time的脚本时,内存消耗也不会稳步增加。在

相关问题 更多 >