PyIntObject内存池机制
----------------- 仅以图片简单说明,不会做过多啰嗦
1. 已分配空间无剩余,新建PyIntObject对象。
此时创建新的PyIntBlock存储块加入对象存储池,由block_list全局指针维护(block_list始终指向最新加入的PyIntBlock);其中,新建的PyIntBlock块内部objects[]形成单链表,通过PyIntObject对象中维护类型的指针ob_type串联,该链表通过全局指针free_list维护(free_list指向objects[]尾部位置,内存使用从objects[]尾部开始,注:仅针对未被使用的新加入存储池的PyIntBlock内部objects[])。如下图:

上述各变量在源码中的定义如下:
struct _intblock {
struct _intblock *next;
PyIntObject objects[N_INTOBJECTS];
};
typedef struct _intblock PyIntBlock;
static PyIntBlock *block_list = NULL;
static PyIntObject *free_list = NULL;

本文介绍了Python中的PyIntObject内存池机制,包括当已分配空间不足时如何创建新的PyIntBlock存储块,以及删除对象后如何回收内存到free_list链表。此外,还讲解了小整数对象的存储在small_ints数组中的优化,以提高内存利用率并减少系统调用。
最低0.47元/天 解锁文章
1036

被折叠的 条评论
为什么被折叠?



