From: Andrew Dalke Date: Fri, 26 May 2006 22:49:03 +0000 (+0000) Subject: Added description of why splitlines doesn't use the prealloc strategy X-Git-Tag: v2.5b1~422 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7e0a62ea9052faf0e19dc2438124751b8f68ce16;p=thirdparty%2FPython%2Fcpython.git Added description of why splitlines doesn't use the prealloc strategy --- diff --git a/Objects/stringobject.c b/Objects/stringobject.c index c59c74ed05e9..7e9378394b9c 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -3768,6 +3768,14 @@ string_splitlines(PyStringObject *self, PyObject *args) data = PyString_AS_STRING(self); len = PyString_GET_SIZE(self); + /* This does not use the preallocated list because splitlines is + usually run with hundreds of newlines. The overhead of + switching between PyList_SET_ITEM and append causes about a + 2-3% slowdown for that common case. A smarter implementation + could move the if check out, so the SET_ITEMs are done first + and the appends only done when the prealloc buffer is full. + That's too much work for little gain.*/ + list = PyList_New(0); if (!list) goto onError;