diff -r 5ae4ff03b35f Objects/stringlib/join.h --- a/Objects/stringlib/join.h Thu Oct 18 22:18:42 2012 +0100 +++ b/Objects/stringlib/join.h Fri Oct 19 14:05:51 2012 +0300 @@ -94,6 +94,19 @@ /* Catenate everything. */ p = STRINGLIB_STR(res); + if (!seplen || (seplen == 1 && nbufs > 2 && nbufs > (sz >> 5))) { + /* fast path */ + if (seplen) + memset(p + buffers[0].len, sepstr[0], + sz - buffers[0].len - buffers[nbufs - 1].len); + for (i = 0; i < nbufs; i++) { + Py_ssize_t n = buffers[i].len; + char *q = buffers[i].buf; + Py_MEMCPY(p, q, n); + p += n; + } + goto done; + } for (i = 0; i < nbufs; i++) { Py_ssize_t n; char *q;