Python整数对象占用32字节内存?64位系统下额外字段是什么?
64位CPython中整数对象占用32字节的额外字段是什么?
在64位CPython实现里,整数对象(PyLongObject)的结构包含以下字段,总大小刚好为32字节:
ob_refcnt:8字节的引用计数字段,用于垃圾回收机制ob_type:8字节的指针,指向int类型对象,标识当前对象的类型ob_size:8字节的Py_ssize_t类型字段,用来记录存储整数值的digit数组长度(像3、4、5这类小整数,该值为1,因为单个digit就能存下)ob_digit[1]:8字节的无符号长整数数组元素,实际存储小整数的数值
把这些字段的字节数相加:8+8+8+8=32字节,正好对应你测试中看到的相邻整数对象ID间隔。
另外,CPython的内存分配会强制做8字节对齐,确保对象地址是8的倍数,而这个整数对象结构本身刚好满足32字节的大小要求,所以相邻小整数对象的地址差就是32字节。
内容的提问来源于stack exchange,提问作者Leon Chang
相关产品推荐
相关产品推荐

