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 по дате отправления:

Предыдущее
От: Amit Kapila
Дата:
Сообщение: pgsql: MAXALIGN the target address where we store flattened value.
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Provide fast path in snprintf.c for conversion specs that areju