我们知道,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分配一个整数对象块的时候,这些对象尚未分配任何值,