From 7e0a62ea9052faf0e19dc2438124751b8f68ce16 Mon Sep 17 00:00:00 2001 From: Andrew Dalke Date: Fri, 26 May 2006 22:49:03 +0000 Subject: Added description of why splitlines doesn't use the prealloc strategy --- Objects/stringobject.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Objects/stringobject.c b/Objects/stringobject.c index c59c74e..7e93783 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; -- cgit v0.12