Re: Speedup usages of pg_*toa() functions

From: Ranier Vilela <ranier(dot)vf(at)gmail(dot)com>
To: Andrew Gierth <andrew(at)tao11(dot)riddles(dot)org(dot)uk>
Cc: David Rowley <dgrowleyml(at)gmail(dot)com>, PostgreSQL Developers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Andres Freund <andres(at)anarazel(dot)de>
Subject: Re: Speedup usages of pg_*toa() functions
Date: 2020-06-09 19:51:58
Message-ID: CAEudQAp5o4sp=EoE-LNRneW=RcmQFfVZ0OKRP4RqMOcqJAy92w@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Em ter., 9 de jun. de 2020 às 15:53, Andrew Gierth <
andrew(at)tao11(dot)riddles(dot)org(dot)uk> escreveu:

> >>>>> "Ranier" == Ranier Vilela <ranier(dot)vf(at)gmail(dot)com> writes:
>
> Ranier> Where " ends up with two copies of pg_ultoa_n inlined into it",
> Ranier> in this simplified example?
>
> The two references to sprintf are both inlined copies of your pg_utoa.
>
> Ranier> (b) I call this tail cut, I believe it saves time, for sure.
>
> You seem to have missed the point that the pg_ultoa_n / pg_ulltoa_n
> functions DO NOT ADD A TRAILING NUL. Which means that pg_ltoa / pg_lltoa
> can't just tail call them, since they must add the NUL after.
>
> Ranier> Regarding bugs:
>
> Ranier> (c) your version don't check size of a var, when pg_ulltoa_n
> Ranier> warning about "least MAXINT8LEN bytes."
>
> Ranier> So in theory, I could blow it up, by calling pg_lltoa.
>
> No. Callers of pg_lltoa are required to provide a buffer of at least
> MAXINT8LEN+1 bytes.
>
Thanks for explanations.

So I would change, just the initialization (var uvalue), even though it is
irrelevant.

int
pg_lltoa(int64 value, char *a)
{
int len = 0;
uint64 uvalue;

if (value < 0)
{
uvalue = (uint64) 0 - uvalue;
a[len++] = '-';
}
else
uvalue = value;

len += pg_ulltoa_n(uvalue, a + len);
a[len] = '\0';

return len;
}

regards,
Ranier Vilela

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andrew Gierth 2020-06-09 20:42:45 Re: Speedup usages of pg_*toa() functions
Previous Message Andres Freund 2020-06-09 19:37:23 global barrier & atomics in signal handlers (Re: Atomic operations within spinlocks)