Python学习笔记一:PyIntObject内存池机制

本文介绍了Python中的PyIntObject内存池机制,包括当已分配空间不足时如何创建新的PyIntBlock存储块,以及删除对象后如何回收内存到free_list链表。此外,还讲解了小整数对象的存储在small_ints数组中的优化,以提高内存利用率并减少系统调用。
摘要由CSDN通过智能技术生成

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块中有对象被删除。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值