From: Rusty Russell <rusty@rustcorp.com.au>
To: Matt Mackall <mpm@selenic.com>
Cc: Matthew Wilcox <matthew@wil.cx>,
Linus Torvalds <torvalds@osdl.org>, Andrew Morton <akpm@osdl.org>,
linux-kernel@vger.kernel.org,
Matthew Wilcox <willy@linux.intel.com>
Subject: Re: [PATCH 1/4] stringbuf: A string buffer implementation
Date: Sat, 27 Oct 2007 20:09:30 +1000 [thread overview]
Message-ID: <200710272009.31430.rusty@rustcorp.com.au> (raw)
In-Reply-To: <20071026205714.GQ17536@waste.org>
On Saturday 27 October 2007 06:57:14 Matt Mackall wrote:
> Well I expect once you start letting people easily build strings by
> concatenation, you'll very shortly afterwards have people using them
> in loops. And having hidden O(n^2) behavior in there is a little sad,
> even though n will tend to be small and well-bounded. If we can do
> something simple to avoid it, we should.
Hi Matt,
I avoid typing even a single character of optimization until it's
justified. This is partially a reaction against the machoptimization
tendencies of many kernel programmers, but it's mainly a concern at the
kernel's complexity creep.
Meanwhile, of course, I've now spent far too long analyzing this :)
Building a 1000 byte string 1 byte at a time involves 6 reallocs (SLAB) or 10
reallocs (SLUB). Frankly, that's good enough without an explicit alloc
length field (better in some ways).
As to keeping an explicit length vs strlen(): those 1000 calls on my test
machine take 1491ns per call with an explicit length vs 1496ns per call with
strlen(). That's not worth 4 bytes, let alone a single line of code, O(n^2)
or no.
As the nail in the coffin, callers only use ->buf, so are insulated from any
such optimizations if we decided to do them in future.
Hope that helps,
Rusty.
PS. I don't think we should switch this to a simple char ** tho, as
the "struct stringbuf" gives us some type safety and reminds people not to
simply kfree it.
next prev parent reply other threads:[~2007-10-27 10:09 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-24 19:58 Stringbuf, v2 Matthew Wilcox
2007-10-24 19:59 ` [PATCH 1/4] stringbuf: A string buffer implementation Matthew Wilcox
2007-10-24 19:59 ` [PATCH 2/4] isdn: Use stringbuf Matthew Wilcox
2007-10-24 19:59 ` [PATCH 3/4] sound: " Matthew Wilcox
2007-10-24 19:59 ` [PATCH 4/4] partitions: Fix non-atomic printk Matthew Wilcox
2007-10-24 20:59 ` [PATCH 1/4] stringbuf: A string buffer implementation Kyle Moffett
2007-10-24 21:21 ` Matthew Wilcox
2007-10-25 0:07 ` Kyle Moffett
2007-10-25 3:23 ` Matthew Wilcox
2007-10-26 2:11 ` Rusty Russell
2007-10-26 3:41 ` Joe Perches
2007-10-26 5:05 ` Joe Perches
2007-10-26 11:57 ` Matthew Wilcox
2007-10-26 20:57 ` Matt Mackall
2007-10-27 10:09 ` Rusty Russell [this message]
2007-10-29 3:03 ` Matt Mackall
2007-10-29 5:38 ` Rusty Russell
2007-10-27 11:47 ` Pekka Enberg
2007-10-27 12:50 ` Rusty Russell
2007-10-27 16:34 ` Pekka Enberg
2007-10-27 16:48 ` Matthew Wilcox
2007-10-24 20:51 ` Stringbuf, v2 Joe Perches
2007-10-24 20:57 ` Matthew Wilcox
2007-10-24 21:06 ` Joe Perches
2007-10-24 21:34 ` Matthew Wilcox
-- strict thread matches above, loose matches on Subject: below --
2007-10-23 21:12 [PATCH 1/4] stringbuf: A string buffer implementation Matthew Wilcox
2007-10-23 22:11 ` Matt Mackall
2007-10-24 1:49 ` Matthew Wilcox
2007-10-24 15:20 ` Matt Mackall
2007-10-24 15:30 ` Matthew Wilcox
2007-10-23 23:43 ` Linus Torvalds
2007-10-24 2:30 ` Matthew Wilcox
2007-10-24 2:45 ` Andrew Morton
2007-10-24 2:19 ` Eric St-Laurent
2007-10-24 2:35 ` Matthew Wilcox
2007-10-24 2:48 ` Eric St-Laurent
2007-10-24 13:21 ` Florian Weimer
2007-10-24 14:02 ` Matthew Wilcox
2007-10-26 12:05 ` Pekka Enberg
2007-10-27 7:31 ` Pavel Machek
2007-10-30 15:26 ` Denys Vlasenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200710272009.31430.rusty@rustcorp.com.au \
--to=rusty@rustcorp.com.au \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=matthew@wil.cx \
--cc=mpm@selenic.com \
--cc=torvalds@osdl.org \
--cc=willy@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox