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;
2. 使用中的PyIntBloct块中有对象被删除。