Python中def的内存处理

python def定义了一个方法(函数/模块),他们的内存使用方式很简单,调用完就清楚内存,但是有特别的情况比如调用模块libxml2。

python在通过def定义了一个方法后,每次调用这个模块,都将进行内存加载。但是一旦使用完整个方法并返回后,python的内存管理机制,将会自动将所有的内存清空。网上已经有很多文章讲解内存管理机制,因此这里就简单的引用一下别人的文章,做个记录。

关于Python的内存管理机制,这里引用51cto的一篇文章中提到的:
“在Python中,许多时候申请的内存都是小块的内存,这些小块内存在申请后,很快又会被释放,由于这些内存的申请并不是为了创建对象,所以并没有对象一级的内存池机制。
这就意味着Python在运行期间会大量地执行malloc和free的操作,频繁地在用户态和核心态之间进行切换,这将严重影响Python的执行效率。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。这也就是之前提到的Pymalloc机制。
在Python 2.5中,Python内部默认的小块内存与大块内存的分界点定在256个字节,这个分界点由前面我们看到的名为SMALL_REQUEST_THRESHOLD的符号控制。
也就是说,当申请的内存小于256字节时,PyObject_Malloc会在内存池中申请内存;当申请的内存大于256字节时,PyObject_Malloc的行为将蜕化为malloc的行为。当然,通过修改Python源代码,我们可以改变这个默认值,从而改变Python的默认内存管理行为。
在一个对象的引用计数减为0时,与该对象对应的析构函数就会被调用。”

引用地址:
http://developer.51cto.com/art/201007/213585.htm

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.