Hyrum K. Wright <hyrum_wright_at_mail.utexas.edu
<mailto:hyrum_wright_at_mail.utexas.edu?Subject=Re:%20svn%20commit:%20r985037%20-%20in%20/subversion/branches/performance/subversion:%20include/%20libsvn_client/%20libsvn_diff/%20libsvn_fs_fs/%20libsvn_ra_svn/%20libsvn_repos/%20libsvn_subr/%20libsvn_wc/%20svn/%20svndumpfilter/%20tests/libsvn_subr/>>
wrote:
>
> On Thu, Aug 12, 2010 at 6:27 PM, <stefan2_at_apache.org> wrote:
> /> Author: stefan2 /
> /> Date: Thu Aug 12 23:27:40 2010 /
> /> New Revision: 985037 /
> /> /
> /> URL: http://svn.apache.org/viewvc?rev=985037&view=rev
> <http://svn.apache.org/viewvc?rev=985037&view=rev> /
> /> Log: /
> /> The second (and probably last) mass change:
> svn_stringbuf_appendbytes has /
> /> a relatively large runtime overhead if we only add single bytes -
> which happens /
> /> frequently in svn's parser codes. /
> /> /
> /> Therefore, add a specialized and simpler variant that takes exactly
> one character /
> /> and use it in any suitable place. /
>
> Instead of introducing a completely new API, what would be the
> implications of just checking for the single-byte case inside of
> svn_stringbuf_appendbytes(), and calling the more specialized version
> in that case?
>
> If we can internally make the decision automatic for API consumers, I
> think that's a win.
The issue here is that adding a single char is such a small
operation that any overhead will hurt. Reasons to keep
the extra API:
* passing a char to a function is a register transfer, passing
a char* pointer prevents the caller from keeping it in a register.
* the shorter signature reduces register pressure
* it is a small enough function that the compiler might inline it
Just to be sure I looked at the code generated by VisualC++
and GCC committed an even improved version in r995603.
-- Stefan^2.
Received on 2010-09-10 01:10:27 CEST