[Python-Dev] Identifier API (original) (raw)
Victor Stinner victor.stinner at haypocalc.com
Thu Oct 13 00:44:33 CEST 2011
- Previous message: [Python-Dev] Identifier API
- Next message: [Python-Dev] Identifier API
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Le samedi 8 octobre 2011 16:54:06, Martin v. Löwis a écrit :
In benchmarking PEP 393, I noticed that many UTF-8 decode calls originate from C code with static strings, in particular PyObjectCallMethod. Many of such calls already have been optimized to cache a string object, however, PyObjectCallMethod remains unoptimized since it requires a char*.
Because all identifiers are ASCII (in the C code base), another idea is to use a structure similar to PyASCIIObject but with an additional pointer to the constant char* string:
typedef struct { PyASCIIObject _base; const char *ascii; } PyConstASCIIObject;
Characters don't have to be copied, just the pointer, but you still have to allocate a structure. Because the size of the structure is also constant, we can have an efficient free list. Pseudo-code to create such object:
PyObject* create_const_ascii(const char *str) { PyConstASCIIObject obj; / ensure maybe that str is ASCII only? */ obj = get_from_freelist(); # reset the object (e.g. hash) if (!obj) { obj = allocate_new_const_ascii(); if (!obj) return NULL; } obj->ascii = str; return obj; }
Except PyUnicode_DATA, such structure should be fully compatible with other PEP 383 structures.
We would need a new format for Py_BuildValue, e.g. 'a' for ASCII string. Later we can add new functions like _PyDict_GetASCII().
Victor
- Previous message: [Python-Dev] Identifier API
- Next message: [Python-Dev] Identifier API
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]