我写了一些代码,它们可以正常工作。该代码使用 MySQLdb 进行(频繁)数据库访问,并使用 4 个不同的数据库。还会生成几个日志文件并使用日志记录模块。真正担心的是,在运行 Valgrind 时,我得到以下信息
==7840== LEAK SUMMARY:
==7840== definitely lost: 29 bytes in 1 blocks
==7840== indirectly lost: 0 bytes in 0 blocks
==7840== possibly lost: 1,104,793 bytes in 8,865 blocks
==7840== still reachable: 70,684 bytes in 2,194 blocks
==7840== suppressed: 0 bytes in 0 blocks
最大的泄漏是
==7840== 393,216 bytes in 1 blocks are possibly lost in loss record 1,585 of 1,585
==7840== at 0x4005903: malloc (vg_replace_malloc.c:195)
==7840== by 0x204929E: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840== by 0x2054833: PyString_InternInPlace (in /usr/lib/libpython2.4.so.1.0)
==7840== by 0x20A0362: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840== by 0x209FB15: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840== by 0x20A0075: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840== by 0x209FB15: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840== by 0x20A0068: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840== by 0x20A04CC: PyMarshal_ReadObjectFromString (in /usr/lib /libpython2.4.so.1.0)
==7840== by 0x20A1D20: PyMarshal_ReadLastObjectFromFile (in /usr/lib/libpython2.4.so.1.0)
==7840== by 0x209AA63: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840== by 0x209CB7E: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840== by 0x209D9B2: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840== by 0x209DE71: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840== by 0x209E087: PyImport_ImportModuleEx (in /usr/lib/libpython2.4.so.1.0)
==7840== by 0x207DB2D: ??? (in /usr/lib/libpython2.4.so.1.0)
所以你看,它显示可能丢失了近 1MB 的内存。我的代码是否存在一些真正的问题,还是使用 MySQLdb 会产生这种行为。另外为了最小化它,我应该明确释放对象(inc文件,数据库连接)还是有一个我可以查看的python模块?