码迷,mamicode.com
首页 > 其他好文 > 详细

整数对象池

时间:2017-05-19 23:47:53      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:pytho   blob   not   调整   meta   save   c#   代码   可变对象   

Python 的内建对象存放在源代码的Objects目录下。
intobject.c用于整数对象

在 Python 中,整数分为小整数对象大整数对象

 

小整数对象

由于数值较小的整数对象在内存中会很频繁地使用,如果每次都向内存申请空间、请求释放,会严重影响 Python 的性能。好在 整数对象 属于不可变对象,可以被共享而不会被修改导致问题,所以为 小整数对象 划定一个范围,即小整数对象池,在Python运行时初始化并创建范围内的所有整数,这个范围内的 整数对象是被共享的,即一次创建,多次共享引用。

那么这个范围是多少呢?从源文件中可以看到,而且,用户可以自行调整,只是每次都要在源文件中修改,而后进行编译、安装。

小整数池的范围:

#ifndef NSMALLPOSINTS
#define NSMALLPOSINTS           257
#endif
#ifndef NSMALLNEGINTS
#define NSMALLNEGINTS           5
#endif
#if NSMALLNEGINTS + NSMALLPOSINTS > 0
/* References to small integers are saved in this array so that they
   can be shared.
   The integers that are saved are those in the range
   -NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive).
*/
static PyIntObject *small_ints[NSMALLNEGINTS + NSMALLPOSINTS];

从源代码可以看出
define NSMALLPOSINTS 257,范围的右边界
define NSMALLNEGINTS 5,范围的左边界
-NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive),[-5, 257)

https://github.com/python/cpython/blob/2.7/Objects/intobject.c#L67-L80

整数对象池

标签:pytho   blob   not   调整   meta   save   c#   代码   可变对象   

原文地址:http://www.cnblogs.com/freelandun/p/6880575.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!