mirror of
https://github.com/python/cpython.git
synced 2025-10-21 22:22:48 +00:00
Remove the CACHE_HASH and INTERN_STRINGS preprocessor symbols.
This commit is contained in:
parent
835840560b
commit
1f7df3595a
6 changed files with 19 additions and 102 deletions
|
@ -24,28 +24,18 @@ variant that assumes a zero-terminated string. Note that none of the
|
|||
functions should be applied to nil objects.
|
||||
*/
|
||||
|
||||
/* Two speedup hacks. Caching the hash saves recalculation of a
|
||||
string's hash value. Interning strings (which requires hash
|
||||
caching) tries to ensure that only one string object with a given
|
||||
value exists, so equality tests are one pointer comparison.
|
||||
Together, these can speed the interpreter up by as much as 20%.
|
||||
Each costs the size of a long or pointer per string object. In
|
||||
addition, interned strings live until the end of times. If you are
|
||||
concerned about memory footprint, simply comment the #define out
|
||||
here (and rebuild everything!). */
|
||||
#define CACHE_HASH
|
||||
#ifdef CACHE_HASH
|
||||
#define INTERN_STRINGS
|
||||
#endif
|
||||
/* Caching the hash (ob_shash) saves recalculation of a string's hash value.
|
||||
Interning strings (ob_sinterned) tries to ensure that only one string
|
||||
object with a given value exists, so equality tests can be one pointer
|
||||
comparison. This is generally restricted to strings that "look like"
|
||||
Python identifiers, although the intern() builtin can be used to force
|
||||
interning of any string.
|
||||
Together, these sped the interpreter by up to 20%. */
|
||||
|
||||
typedef struct {
|
||||
PyObject_VAR_HEAD
|
||||
#ifdef CACHE_HASH
|
||||
long ob_shash;
|
||||
#endif
|
||||
#ifdef INTERN_STRINGS
|
||||
PyObject *ob_sinterned;
|
||||
#endif
|
||||
char ob_sval[1];
|
||||
} PyStringObject;
|
||||
|
||||
|
@ -70,15 +60,9 @@ extern DL_IMPORT(PyObject *) PyString_Format(PyObject *, PyObject *);
|
|||
extern DL_IMPORT(PyObject *) _PyString_FormatLong(PyObject*, int, int,
|
||||
int, char**, int*);
|
||||
|
||||
#ifdef INTERN_STRINGS
|
||||
extern DL_IMPORT(void) PyString_InternInPlace(PyObject **);
|
||||
extern DL_IMPORT(PyObject *) PyString_InternFromString(const char *);
|
||||
extern DL_IMPORT(void) _Py_ReleaseInternedStrings(void);
|
||||
#else
|
||||
#define PyString_InternInPlace(p)
|
||||
#define PyString_InternFromString(cp) PyString_FromString(cp)
|
||||
#define _Py_ReleaseInternedStrings()
|
||||
#endif
|
||||
|
||||
/* Macro, trading safety for speed */
|
||||
#define PyString_AS_STRING(op) (((PyStringObject *)(op))->ob_sval)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue