Python3的long实现问题

2013-03-27 17:10:21 +08:00
 Sherlockhlt
两个问题,困惑了我好久:
1. Python3中是不是把int都改成long,然后对外申称都是int了?
2. Python3中是不是long都改成不缓存了?在longobject.c里面没有看到对象缓存(free list)的代码。
4834 次点击
所在节点    Python
4 条回复
timonwong
2013-03-27 17:22:14 +08:00
1. 嗯,统一为int,就是Python 2.x的long
2. 有的:
int
_PyLong_Init(void)
{
#if NSMALLNEGINTS + NSMALLPOSINTS > 0 // 从这里开始分配
...... 一段代码
#endif // 这里结束
/* initialize int_info */
Sherlockhlt
2013-03-27 19:30:53 +08:00
@timonwong
这一段是存放小整数的,只存放[-5,257)
在2.6.x中,大整数是用自由链表来缓存的,但是在3.0找了很久都找不到。。
timonwong
2013-03-27 20:59:54 +08:00
@Sherlockhlt
刚才理解错了,确实没有freelist了
这里有相关的issue
http://bugs.python.org/issue2013
Sherlockhlt
2013-03-27 21:46:18 +08:00
@timonwong
哦,原来他们觉得优化不够明显就删掉了。。3.0改动真多阿

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/64199

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX