python 申请内存_Python内存分配器(如何产生一个对象的过程)

内存分配器

Python中,当要分配内存时,不单纯使用malloc/free,而是在其基础上堆放三个独立的分层,有效的进行分配。

举个栗子:c语言中申请一片空间就需要使用malloc当释放这个空间的时候就要使用free。Python把这一操作放在最底层也就是0层来实现。那么0层之上是用来做什么呢?我们可能遇到过在python里新建了a=5,b=5两个对象,但是这两个对象id是一样的。这就是Python内存分配器的特点之一,它可以不使用malloc申请空间,而是把对象池里已有的对象返回给你。当这个数字足够大比如说a=560000,b=560000,这时候就会发现两个对象的id是不一样的。这其实就是用了0层的malloc了。

python 申请内存_Python内存分配器(如何产生一个对象的过程)_第1张图片

Python分配器分层

python 申请内存_Python内存分配器(如何产生一个对象的过程)_第2张图片

第0层往下是OS的功能。-2是隐含和机器的物理性相关联的部分,OS的虚拟内存管理器负责这部分功能。-1层是与机器实际进行交互的部分,OS会执行这部分功能。

第3层到第0层调用了一些具有代表性的函数,下图示:以生成字典对象为例

你可能感兴趣的:(python,申请内存)