
CPython2.7源码学习
文章平均质量分 51
oyw5201314ck
这个作者很懒,什么都没留下…
展开
-
1.定长类型和变长类型
Python中一切皆对象,而一切对象皆有类型,而类型对象也有类型,理解起来有点绕!常用的类型有int、float、long、string、list、tuple、dict这些,而我们可以将这些类型分为以下2类:1. 定长类型int、float、long这些都是定长类型,且是不可变类型,即我们无法对这些类型的对象进行原地修改,我们通常看到的修改都是通过创建一个新的对象来实现的; 如下我们对一个long...原创 2018-02-28 09:38:55 · 3809 阅读 · 0 评论 -
2. 判断有符号整数(长整数)加法的溢出
在CPython的源码中,进行有符号整数的加法时,会进行溢出判断,以决定是否使用long型来存放结果,判断条件如下:int a, b, i;i = a + b;if ((i ^ a) < 0 && (i ^ b) < 0) printf("overflow\n");从上面可见(i ^ a) < 0 && (i ^ b) < 0是判...原创 2018-03-05 10:50:02 · 2794 阅读 · 0 评论 -
3. 基本数据类型之int
不论何种编程语言,int都是很常见的基本数据类型之一,其定义如下:包含一个引用计数、一个指向类型对象的指针和一个long型值/* object.h */#ifdef Py_TRACE_REFS#define _PyObject_HEAD_EXTRA \ struct _object *_ob_next; \ struct _objec...原创 2018-03-05 16:47:29 · 1275 阅读 · 0 评论 -
4. int类型之小整数对象池
Python假设小整数的使用频率非常高,所以使用对象池来避免小整数使用时频繁的创建工作。在Python初始化时,就会对这个小整数对象池进行初始化工作,具体就是创建小整数对应的对象。由于内存有限,故而不可能创建很多的小整数对象,所以需要定义小整数的范围,目前是-5到256,我们可以根据具体应用场景对此进行修改,然后重新编译Python解释器。/* intobject.c */#ifndef NSM...原创 2018-03-05 17:02:33 · 422 阅读 · 0 评论