垃圾回收
Python 不像 C++,Java 等语言一样,他们可以不用事先声明变量类型而直接对变量进行赋值。对 Python 语言来讲,对象的类型和内存都是在运行时确定的。这也是为什么我们称 Python 语言为动态类型的原因(这里我们把动态类型可以简单的归结为对变量内存地址的分配是在运行时自动判断变量类型并对变量进行赋值)。
引用计数
Python 采用了类似 Windows 内核对象一样的方式来对内存进行管理。每一个对象,都维护这一个对指向该对对象的引用的计数。当变量被绑定在一个对象上的时候,该变量的引用计数就是 1,(还有另外一些情况也会导致变量引用计数的增加),系统会自动维护这些标签,并定时扫描,当某标签的引用计数变为 0 的时候,该对就会被回收。
内存池机制
Python 的内存机制以金字塔行,1、2 层主要有操作系统进行操作
第 0 层是 C 中的 malloc,free 等内存分配和释放函数进行操作
第 1 层和第 2 层是内存池,有 Python 的接口函数 PyMem_Malloc 函数实现,当对象小于 256K 时由该层直接分配内存
第 3 层是最上层,也就是我们对 Python 对象的直接操作
在 C 中如果频繁的调用 malloc 与 free 时,会产生性能问题.再加上频繁的分配与释放小块的内存会产生内存碎片。Python 在这里主要干的工作有:
如果请求分配的内存在 1~2