糖豆贴心提醒,本文阅读时间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 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|