Python是一门开发效率很高的语言,而且其既下里巴人,又阳春白雪。也就是说这门语言只要稍加学习就可以上手开发,而深入探究也会发现Python有很多高深的东西。最近读了《Python源码剖析》,收获良多,今天就把Python的内存管理整理一番。
本文的组织如下:
第一部分:整理Python的内存管理机制,主要包括内存池以及对象缓存池
第二部分:从百度的笔试题来探讨如何实现一个缓存池。
第一部分:整理Python的内存管理机制
Python的内存管理内存总共分为4层,如下图所示
其中Layer2为内存池,Layer3为对象缓冲池。Python的对象缓冲池Layer3是建立在Layer2基础上的。
本文重点总结内存池和对象缓冲池。
内存池
ython又分为大内存和小内存。大小以256字节为界限,对于大内存使用Malloc进行分配,而对于小内存则使用内存池进行分配。
Python的内存池又分为4个层次:Block、Pool、Arean、usedpool,如下图所示
其中block是最小的内存单元,大小为8的整数倍。如果想申请27B的内存,会分配一个32B的block,其中申请size和size_index之间的关系有对应,见下图
其中block是最小的内存单元,大小为8的整数倍。如果想申请27B的内存,会分配一个32B的block,其中申请size和size_index之间的关系有对应,见下图