git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 2/2] sha1_file: improve sha1_file_name() perfs

From
Junio C Hamano <gitster@pobox.com>
Date
Jan 17, 2018, 20:54 UTC
Message-ID
<xmqq4lnkryt2.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<3cbace45-61df-3074-a48c-66c68c96d542@jeffhostetler.com>
Jeff Hostetler <git@jeffhostetler.com> writes:
Show 13 quoted lines
>>     void sha1_file_name(struct strbuf *buf, const unsigned char
>> *sha1)
>>   {
>> -	strbuf_addf(buf, "%s/", get_object_directory());
>> +	const char *obj_dir = get_object_directory();
>> +	size_t extra = strlen(obj_dir) + 1 + GIT_MAX_HEXSZ;
>
> Very minor nit.  Should this be "+3" rather than "+1"?
> One for the slash after obj_dir, one for the slash between
> "xx/y[38]", and one for the trailing NUL.
>
>>   +	if (extra > strbuf_avail(buf))
>> +		strbuf_grow(buf, extra);

The callers who care use static strbuf with 1/2, which lets them grow it to an appropriate size after they make their first call.

On the other hand, the ones to which performance does not matter by definition do not care.

I actually think this whole "extra -> grow" business should be discarded. With a miscomputed "extra" like this, it does not help anybody---everybody may pay cost for one extra realloc due to the miscalculation, and the ones that do care also do during their first call.

Previous: Jeff HostetlerNext: Jeff King
Message 4 of 6 in “sha1_file: remove static strbuf from sha1_file_name()”
  1. 1/2 sha1_file: remove static strbuf from sha1_file_name()Christian Couder, Jan 17, 2018
  2. 2/2 sha1_file: improve sha1_file_name() perfsChristian Couder, Jan 17, 2018
  3. Jeff HostetlerJan 17, 2018
  4. Junio C HamanoJan 17, 2018
  5. Jeff KingJan 17, 2018
  6. Christian CouderJan 17, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.