git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] hex.c: reduce memory footprint of sha1_to_hex static buffers
@ 2015-02-13 21:18 Stefan Beller
  2015-02-13 21:41 ` Junio C Hamano
  0 siblings, 1 reply; 5+ messages in thread
From: Stefan Beller @ 2015-02-13 21:18 UTC (permalink / raw)
  To: git; +Cc: torvalds, gitster, Stefan Beller

41 bytes is the exact number of bytes needed for having the returned
hex string represented. 50 seems to be an arbitrary number, such
that there are no benefits from alignment to certain address boundaries.

Signed-off-by: Stefan Beller <sbeller@google.com>
---
 hex.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hex.c b/hex.c
index 9ebc050..cfd9d72 100644
--- a/hex.c
+++ b/hex.c
@@ -59,7 +59,7 @@ int get_sha1_hex(const char *hex, unsigned char *sha1)
 char *sha1_to_hex(const unsigned char *sha1)
 {
 	static int bufno;
-	static char hexbuffer[4][50];
+	static char hexbuffer[4][41];
 	static const char hex[] = "0123456789abcdef";
 	char *buffer = hexbuffer[3 & ++bufno], *buf = buffer;
 	int i;
-- 
2.3.0.81.gc37f363

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] hex.c: reduce memory footprint of sha1_to_hex static buffers
  2015-02-13 21:18 [PATCH] hex.c: reduce memory footprint of sha1_to_hex static buffers Stefan Beller
@ 2015-02-13 21:41 ` Junio C Hamano
  2015-02-13 21:56   ` Stefan Beller
  0 siblings, 1 reply; 5+ messages in thread
From: Junio C Hamano @ 2015-02-13 21:41 UTC (permalink / raw)
  To: Stefan Beller; +Cc: git, torvalds

Stefan Beller <sbeller@google.com> writes:

> 41 bytes is the exact number of bytes needed for having the returned
> hex string represented. 50 seems to be an arbitrary number, such
> that there are no benefits from alignment to certain address boundaries.

Yes, with s/seems to be/is/;

This comes from e83c5163 (Initial revision of "git", the information
manager from hell, 2005-04-07), and when dcb3450f (sha1_to_hex()
usage cleanup, 2006-05-03) introduced the "4 recycled buffers" on
top, the underlying array was left at 50 bytes long.

You can now have "I fixed Linus's bug" badge ;-)

> Signed-off-by: Stefan Beller <sbeller@google.com>
> ---
>  hex.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/hex.c b/hex.c
> index 9ebc050..cfd9d72 100644
> --- a/hex.c
> +++ b/hex.c
> @@ -59,7 +59,7 @@ int get_sha1_hex(const char *hex, unsigned char *sha1)
>  char *sha1_to_hex(const unsigned char *sha1)
>  {
>  	static int bufno;
> -	static char hexbuffer[4][50];
> +	static char hexbuffer[4][41];
>  	static const char hex[] = "0123456789abcdef";
>  	char *buffer = hexbuffer[3 & ++bufno], *buf = buffer;
>  	int i;

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] hex.c: reduce memory footprint of sha1_to_hex static buffers
  2015-02-13 21:41 ` Junio C Hamano
@ 2015-02-13 21:56   ` Stefan Beller
  2015-02-13 21:58     ` Linus Torvalds
  2015-02-13 23:45     ` Junio C Hamano
  0 siblings, 2 replies; 5+ messages in thread
From: Stefan Beller @ 2015-02-13 21:56 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git@vger.kernel.org, Linus Torvalds

On Fri, Feb 13, 2015 at 1:41 PM, Junio C Hamano <gitster@pobox.com> wrote:
> Stefan Beller <sbeller@google.com> writes:
>
>> 41 bytes is the exact number of bytes needed for having the returned
>> hex string represented. 50 seems to be an arbitrary number, such
>> that there are no benefits from alignment to certain address boundaries.
>
> Yes, with s/seems to be/is/;
>
> This comes from e83c5163 (Initial revision of "git", the information
> manager from hell, 2005-04-07), and when dcb3450f (sha1_to_hex()
> usage cleanup, 2006-05-03) introduced the "4 recycled buffers" on
> top, the underlying array was left at 50 bytes long.
>
> You can now have "I fixed Linus's bug" badge ;-)

I don't think it's a bug, it's just wasting memory?

As I could not find any documentation on the
magical 50 in the early days, I cc'd Linus
in case there is something I did not think of yet.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] hex.c: reduce memory footprint of sha1_to_hex static buffers
  2015-02-13 21:56   ` Stefan Beller
@ 2015-02-13 21:58     ` Linus Torvalds
  2015-02-13 23:45     ` Junio C Hamano
  1 sibling, 0 replies; 5+ messages in thread
From: Linus Torvalds @ 2015-02-13 21:58 UTC (permalink / raw)
  To: Stefan Beller; +Cc: Junio C Hamano, git@vger.kernel.org

On Fri, Feb 13, 2015 at 1:56 PM, Stefan Beller <sbeller@google.com> wrote:
>
> As I could not find any documentation on the
> magical 50 in the early days, I cc'd Linus
> in case there is something I did not think of yet.

Nothing magical, it's just "rounded up from 40 + NUL character".

                        Linus

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] hex.c: reduce memory footprint of sha1_to_hex static buffers
  2015-02-13 21:56   ` Stefan Beller
  2015-02-13 21:58     ` Linus Torvalds
@ 2015-02-13 23:45     ` Junio C Hamano
  1 sibling, 0 replies; 5+ messages in thread
From: Junio C Hamano @ 2015-02-13 23:45 UTC (permalink / raw)
  To: Stefan Beller; +Cc: git@vger.kernel.org, Linus Torvalds

Stefan Beller <sbeller@google.com> writes:

> On Fri, Feb 13, 2015 at 1:41 PM, Junio C Hamano <gitster@pobox.com> wrote:
>> Stefan Beller <sbeller@google.com> writes:
>>
>>> 41 bytes is the exact number of bytes needed for having the returned
>>> hex string represented. 50 seems to be an arbitrary number, such
>>> that there are no benefits from alignment to certain address boundaries.
>>
>> Yes, with s/seems to be/is/;
>>
>> This comes from e83c5163 (Initial revision of "git", the information
>> manager from hell, 2005-04-07), and when dcb3450f (sha1_to_hex()
>> usage cleanup, 2006-05-03) introduced the "4 recycled buffers" on
>> top, the underlying array was left at 50 bytes long.
>>
>> You can now have "I fixed Linus's bug" badge ;-)
>
> I don't think it's a bug, it's just wasting memory?

Yes and no ;-)  As I already said above, 50 "is" just an arbitrary
number that is round and enough to hold 40 bytes with trailing NUL,
and the waste does not lead to behaviour that is different from what
was intended, of course, so it would not crash.

However, the wastage was bothersome enough to make you send a patch,
so you can call it a "bug".  It was wasting readers time ;-)

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-02-13 23:45 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-02-13 21:18 [PATCH] hex.c: reduce memory footprint of sha1_to_hex static buffers Stefan Beller
2015-02-13 21:41 ` Junio C Hamano
2015-02-13 21:56   ` Stefan Beller
2015-02-13 21:58     ` Linus Torvalds
2015-02-13 23:45     ` Junio C Hamano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).