dictobject.h
PyDictObject是一种字典类型,从可哈希的对象映射到另一个对象。
然后提到了在Objects目录下,有dictnotes.txt文件,关于字典的使用设计和优化。
字典类实际上是维护了一张哈希表,而表项,entry or slot,有3种状态。
1. Unused. me_key == me_value == NULL
未使用状态,key和value都为空。
这是表项的初始状态,仅当初始时key才会为空。
2. Active. me_key != NULL and me_key != dummy and me_value != NULL
正在使用状态,key不为空且不为dummy,value不为空。
3. Dummy. me_key == dummy and me_value == NULL
曾使用状态,但该表项已经被删除了。key为dummy,value为空。
设置Dummy状态是因为Python面对hash冲突时所采取的是开放地址法,会再次寻找位置。
所以会产生探索链这样的关联结构,比如A、B、C三者的哈希值一样,那么会处在一条探索链上。
当B被删除后,为了保证能够搜索到C,特地设置Dummy值,表示后面还可能存在有效表项。
#definePyDict_MINSIZE8
PyDict_MINSIZE是一个字典的最小大小,这个“小字典”是直接作为表项的成员的,ma_smalltable。
表项的结构如下:
typedefstruct{
/* Cached hash code of me_key. Note that hash codes are C longs.
* We have to use Py_ssize_t instead because dict_popitem() abuses
* me_hash to hold a search finger.
*/
Py_ssize_tme_hash;
PyObject*me_key;
PyObject*me_value;
}PyDictEntry;
由注释可以知道me_hash的一个作用是避免重复计算,另一个作用是可以用来指向探索链的下一个。
字典的结构如下:
typedefstruct_dictobjectPyDictObject;
struct_dictobject{
PyObject_HEAD
Py_ssize_tma_fill;/*
# Active + # Dummy */
Py_ssize_tma_used;/*
# Active */
/* The table contains ma_mask + 1 slots, and that's a power of 2.
* We store the mask instead of the size because the mask is more
* frequently needed.
*/
Py_ssize_tma_mask;
/* ma_table points to ma_smalltable for small tables, else to
* additional malloc'ed memory. ma_table is never NULL! This rule
* saves repeated runtime null-tests in the workhorse getitem and
* setitem calls.
*/
PyDictEntry*ma_table;
PyDictEntry*(*ma_lookup)(PyDictObject*mp,PyObject*key,longhash);
PyDictEntryma_smalltable[PyDict_MINSIZE];
};
由注释可知ma_fill和ma_used的含义。
ma_mask经常用来与key的哈希值进行与运算,使其落在表的范围内。
ma_table指向ma_smalltable或者另外分配的内存。
为了保证在表中搜索位置的过程会终止,表中至少有一项Unused。
另外为了避免低效搜索,当有三分之二的表项被使用了,会重新调整表的大小。
JasonLee 2011.08.14 23:35 明天又周一了,今天大连散步
分享到:
相关推荐
标题提到的“python读取C语言头文件测试用例”正是解决此类问题的一种方法。下面我们将详细探讨如何使用Python来读取和解析C语言的头文件,以及提供的测试用例。 首先,C语言的头文件主要包含了函数声明、数据类型...
本篇文章将介绍如何使用Python来读取和解析C语言的头文件,以便于在Python程序中利用这些信息。 首先,我们要了解C语言的头文件(如`spi.h`)通常包含函数原型、类型定义、宏定义等。在Python中,我们可以借助文本...
本项目是使用Python 2.7.3版本编写的一个程序,名为`ExtractHeaderFileRely.py`,它自动扫描C工程中的头文件依赖,并将结果输出到`output.txt`文件中,简化了手动维护Makefile时的工作。 首先,让我们详细理解`...
本篇文章将围绕"python读取verilog头文件"这一主题,探讨如何使用Python进行Verilog文件的读取,并结合提供的资源进行详细讲解。 首先,`readRegFromVFile.py`是一个Python脚本,很可能实现了读取Verilog头文件...
C语言头文件 DIRC语言头文件 DIRC语言头文件 DIRC语言头文件 DIRC语言头文件 DIRC语言头文件 DIRC语言头文件 DIRC语言头文件 DIRC语言头文件 DIRC语言头文件 DIRC语言头文件 DIRC语言头文件 DIRC语言头文件 DIRC语言...
C语言头文件 MATHC语言头文件 MATHC语言头文件 MATHC语言头文件 MATHC语言头文件 MATHC语言头文件 MATHC语言头文件 MATHC语言头文件 MATHC语言头文件 MATHC语言头文件 MATHC语言头文件 MATHC语言头文件 MATHC语言...
C语言头文件 OLEC语言头文件 OLEC语言头文件 OLEC语言头文件 OLEC语言头文件 OLEC语言头文件 OLEC语言头文件 OLEC语言头文件 OLEC语言头文件 OLEC语言头文件 OLEC语言头文件 OLEC语言头文件 OLEC语言头文件 OLEC语言...
C语言头文件 MEMC语言头文件 MEMC语言头文件 MEMC语言头文件 MEMC语言头文件 MEMC语言头文件 MEMC语言头文件 MEMC语言头文件 MEMC语言头文件 MEMC语言头文件 MEMC语言头文件 MEMC语言头文件 MEMC语言头文件 MEMC语言...
C语言头文件 NB30C语言头文件 NB30C语言头文件 NB30C语言头文件 NB30C语言头文件 NB30C语言头文件 NB30C语言头文件 NB30C语言头文件 NB30C语言头文件 NB30C语言头文件 NB30C语言头文件 NB30C语言头文件 NB30C语言...
C语言头文件 UTILC语言头文件 UTILC语言头文件 UTILC语言头文件 UTILC语言头文件 UTILC语言头文件 UTILC语言头文件 UTILC语言头文件 UTILC语言头文件 UTILC语言头文件 UTILC语言头文件 UTILC语言头文件 UTILC语言...
C语言头文件 tempC语言头文件 tempC语言头文件 tempC语言头文件 tempC语言头文件 tempC语言头文件 tempC语言头文件 tempC语言头文件 tempC语言头文件 tempC语言头文件 tempC语言头文件 tempC语言头文件 tempC语言...
VS编译python需要的头文件 inttypes.h , VS2010 VC调用python时需要
C语言头文件 DATAC语言头文件 DATAC语言头文件 DATAC语言头文件 DATAC语言头文件 DATAC语言头文件 DATAC语言头文件 DATAC语言头文件 DATAC语言头文件 DATAC语言头文件 DATAC语言头文件 DATAC语言头文件 DATAC语言...
C语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言头文件 NEWC语言...
C语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言...
C语言头文件 DOSC语言头文件 DOSC语言头文件 DOSC语言头文件 DOSC语言头文件 DOSC语言头文件 DOSC语言头文件 DOSC语言头文件 DOSC语言头文件 DOSC语言头文件 DOSC语言头文件 DOSC语言头文件 DOSC语言头文件 DOSC语言...
C++头文件2.0(万能头文件,必背头文件)C++头文件2.0(万能头文件,必背头文件)C++头文件2.0(万能头文件,必背头文件)C++头文件2.0(万能头文件,必背头文件)C++头文件2.0(万能头文件,必背头文件)C++头文件...
C语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC语言...
C语言头文件 GLUC语言头文件 GLUC语言头文件 GLUC语言头文件 GLUC语言头文件 GLUC语言头文件 GLUC语言头文件 GLUC语言头文件 GLUC语言头文件 GLUC语言头文件 GLUC语言头文件 GLUC语言头文件 GLUC语言头文件 GLUC语言...
C语言头文件 XMEMORYC语言头文件 XMEMORYC语言头文件 XMEMORYC语言头文件 XMEMORYC语言头文件 XMEMORYC语言头文件 XMEMORYC语言头文件 XMEMORYC语言头文件 XMEMORYC语言头文件 XMEMORYC语言头文件 XMEMORYC语言...