首页 存档 技术 查看内容

Python内存管理模块的一个奇技淫巧

2018-3-30 13:00 |来自: 互联网 337 0

摘要: 糖豆贴心提醒,本文阅读时间8分钟 最近在读Python源码中有关内存管理的部分。Python在分配小块内存(小于256字节)时,采用了内存池,以降低对内核内存分配程序的调用频次。在内存池的设计上,采用了一个分层的设计 ...

糖豆贴心提醒,本文阅读时间8分钟


最近在读Python源码中有关内存管理的部分。Python在分配小块内存(小于256字节)时,采用了内存池,以降低对内核内存分配程序的调用频次。在内存池的设计上,采用了一个分层的设计,由上到下依次是arena、pool、block。这次我看到的这个比较费解的结构,就来自于分配内存时,对于pool的处理。

谜团

在最主要的分配内存的函数_PyObject_Alloc中,我看到了这么一段代码:

从注释和函数命名中也能看出来,这段代码的意思,大概是从arena的freepools中拿出一个pool,插入到usedpools的开头。但是,这里有一个奇怪的地方:

如果说usedpools中存储的不同size的pool链表,那么为什么index要用size size来表示呢?

初探

首先,我在代码中搜索了一下usedpools,找到了这么一段注释:

This is involved. For an index i, usedpools[i i] is the header for a list of

all partially used pools holding small blocks with “size class idx” i. So

usedpools[0] corresponds to blocks of size 8, usedpools[2] to blocks of size

16, and so on: index 2*i

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部