python中Integer对象的实现

本文探讨了Python(Cpython)中Integer对象的实现细节,包括无大小限制的特点,以及如何避免每次创建新对象时的内存分配。Python通过PyIntObject和PyIntBlock结构管理整数对象,使用单链表跟踪分配的整数块,并且针对小整数(-5至256)进行了优化,以提高访问速度。当创建或访问超出小整数范围的整数时,Python会动态分配新的PyIntBlock。
摘要由CSDN通过智能技术生成

我们知道,python中的整数有一些特点

  • 无大小限制,也就是说不像Java,C++会有溢出的情况,当然python也会溢出,这和你的内存大小有关系
  • 存储正/负数底层虽然是用补码,但是显示出来却是:bin(-3)='-0b11',很捞

Cpython中integer是怎么实现的呢?

PyIntObject结构:

typedef struct
{
    PyObject_HEAD;
    long ob_ival;
}PyIntObject;

为了避免每次需要一个新的整数对象时都分配一个新整数对象,python会预先分配一个空闲的未使用的整数对象块

python通过使用下面这个结构来分配整数对象(PyIntObject),这个结构称为PyIntBlock,初始化时,新的整数值分配给一个对象

PyIntBlock结构:

struct _intblock
{
    struct _intblock *next;
    PyIntObject objects[N_INTOBJECTS];
};
//取别名
typedef struct _intblock PyIntBlock;

当python分配一个整数对象块的时候,这些对象尚未分配任何值,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值