python虚拟机内存泄露?
时间:2011-06-04 来源:konlil
发现引擎有内存泄露。
根据TDD思想,将复杂的demo统统扔一边,写了几个非常简单的test工程(期间还了解了一下google开源的gtest单元测试框架,相当好用,推荐一下)。test工程依次测试了不同的dll,发现python.dll发生泄露,如果是以前我一定会忽略之,认为是检测工具的问题(我用的是visual leak detector 1.9d);但是自从查了几次泄露问题及翻了一下vld的代码之后,对于泄露问题还是比较谨慎。
根据vld报的结果,在执行Py_Initialize()之后就发生了内存申请,并且这部分内存没有被释放。以前没有读过python源码,所以理解起来很费劲。
依旧follow tdd的思想,写test工程:
#include "vld.h"#include "python.h"
#pragma comment(lib, "pythonstatic_27.lib")
int main()
{
Py_Initialize();
Py_Finialize();
return 0;
}
测试发现依然泄露,认定python虚拟机有内存泄露,仔细查了下代码,发现python解释器在初始化时会一次性分配一些内存用于类型等对象的存储;而这部分内存直到退出都不会释放;因此被vld认定为内存泄露。
最后在google大神的帮助下,确认了这一事实,一段英文(原文找不到了)解释了这一问题,并且被开发组认为不是真正的泄露,so一直都没有修正。其中还推荐实用valgarid(*nix平台上的,so单词也没记住)工具来查比较好,因为它会忽略这种一次性申请的“泄露”。
相关阅读 更多 +