python虚拟机内存泄露?

发现引擎有内存泄露。

根据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单词也没记住)工具来查比较好,因为它会忽略这种一次性申请的“泄露”。

转载于:https://www.cnblogs.com/konlil/archive/2011/06/04/2072661.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值