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}$
这不是内存泄漏,这只是意味着垃圾回收器还没有运行。即使垃圾回收器确实在运行,也很可能存在某种内存池。在
ProcessExplorer不是一个好的调试工具,尤其是对于内存。在
脚本本身不会泄露。使用
gc.set_debug(gc.DEBUG_LEAK)
运行表明所创建的结构类型是可收集的,并且gc.garbage
在每次循环迭代中都保持为空,因此没有不可回收的对象。在Linux系统上运行带有time
的脚本时,内存消耗也不会稳步增加。在相关问题 更多 >
编程相关推荐