pymalloc — 从源码看 Python 对象分配器实现

Python 中一切皆对象,那么 Python 解释器(CPython)是如何管理这些内存中的对象呢?为了找到答案,自己下载了 Python 源码,参照源码注释学习了 pymalloc — Python object allocator 的实现。现在这里做个总结。

pymalloc 的实现位于 Python 源码主目录下的 Objects 目录中,文件名为 obmalloc.c。

背景

既然 CPython 的底层用 C 语言实现,那为何不直接使用标准库中的malloc/realloc/free等函数进行内存管理呢?这是因为,当 Python 应用频繁地创建和销毁一些小的对象,那么底层就要多次重复调用 malloc 和 free 等函数进行内存分配。这不仅会引入较大的系统开销,而且还可能产生大量的内存碎片。为了解决这个问题,Python 实现了一个类似内存池的机制—pymalloc 来满足较小对象(默认512KB以下)的内存请求。

Python 内存管理架构

简单地说,allocator 预先向系统申请一定数量的内存空间并格式化,每当有满足条件的内存请求时,allocato


阅读全文 »