pgsql: Make assorted performance improvements in snprintf.c.
От | Tom Lane |
---|---|
Тема | pgsql: Make assorted performance improvements in snprintf.c. |
Дата | |
Msg-id | E1g7hyu-00024f-Om@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Make assorted performance improvements in snprintf.c. In combination, these changes make our version of snprintf as fast or faster than most platforms' native snprintf, except for cases involving floating-point conversion (which we still delegate to the native sprintf). The speed penalty for a float conversion is down to around 10% though, much better than before. Notable changes: * Rather than always parsing the format twice to see if it contains instances of %n$, do the extra scan only if we actually find a $. This obviously wins for non-localized formats, and even when there is use of %n$, we can avoid scanning text before the first % twice. * Use strchrnul() if available to find the next %, and emit the literal text between % escapes as strings rather than char-by-char. * Create a bespoke function (dopr_outchmulti) for the common case of emitting N copies of the same character, in place of writing loops around dopr_outch. * Simplify construction of the format string for invocations of sprintf for floats. * Const-ify some internal functions, and avoid unnecessary use of pass-by-reference arguments. Patch by me, reviewed by Andres Freund Discussion: https://postgr.es/m/11787.1534530779@sss.pgh.pa.us Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/abd9ca377d669a6e0560e854d7e987438d0e612e Modified Files -------------- configure | 2 +- configure.in | 2 +- src/include/pg_config.h.in | 3 + src/include/pg_config.h.win32 | 3 + src/port/snprintf.c | 695 ++++++++++++++++++++++++++---------------- 5 files changed, 432 insertions(+), 273 deletions(-)
В списке pgsql-committers по дате отправления: