Re: Performance improvements for src/port/snprintf.c
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Andres Freund <andres@anarazel.de>
Cc: pgsql-hackers@lists.postgresql.org,
Thomas Munro <thomas.munro@enterprisedb.com>,
Andrew Gierth <andrew@tao11.riddles.org.uk>,
Alexander Kuzmenkov <a.kuzmenkov@postgrespro.ru>
Date: 2018-10-03T16:54:52Z
Lists: pgsql-hackers
Andres Freund <andres@anarazel.de> writes: > It seems the general "use strfromd if available" approach is generally > useful, even if we need to serialize the precision. Agreed. > Putting it into an > inline appears to be helpful, avoids some of the otherwise precision > related branches. Do you have any feelings about which header to put > the code in? I used common/string.h so far. I do not think it should be in a header, for two reasons: (1) The need to use sprintf for portability means that we need very tight constraints on the precision spec *and* the buffer size *and* the format type (%f pretty much destroys certainty about how long the output string is). So this isn't going to be general purpose code. I think just writing it into float[48]out is sufficient. (2) It's already the case that most code trying to emit floats ought to go through float[48]out, in order to have standardized treatment of Inf and NaN. Providing some other API in a common header would just create a temptation to break that policy. Now, if we did write our own float output code then we would standardize Inf/NaN outputs inside that, and both of these issues would go away ... but I think what we'd do is provide something strfromd-like as an alternate API for that code, so we still won't need a wrapper. And anyway it doesn't sound like either of us care to jump that hurdle right now. regards, tom lane
Commits
-
Improve snprintf.c's handling of NaN, Infinity, and minus zero.
- 6eb3eb577d76 12.0 landed
-
Rationalize snprintf.c's handling of "ll" formats.
- 595a0eab7f42 12.0 landed
-
Provide fast path in snprintf.c for conversion specs that are just "%s".
- 6d842be6c118 12.0 landed
-
Make assorted performance improvements in snprintf.c.
- abd9ca377d66 12.0 landed
-
Set snprintf.c's maximum number of NL arguments to be 31.
- 625b38ea0e98 12.0 cited
-
Always use our own versions of *printf().
- 96bf88d52711 12.0 cited