blob: 4d91c33a9abe03927260efa83f053f1730b5e312 [file]
.. _module-pw_string-size-reports:
==================
Code Size Analysis
==================
.. pigweed-module-subpage::
:name: pw_string
Save code space by replacing ``snprintf``
=========================================
The C standard library function ``snprintf`` is commonly used for string
formatting. However, it isn't optimized for embedded systems, and using it will
bring in a lot of other standard library code that will inflate your binary
size.
Size comparison: snprintf versus pw::StringBuilder
--------------------------------------------------
The fixed code size cost of :cc:`pw::StringBuilder` is smaller than that of
``std::snprintf``. Using only :cc:`pw::StringBuilder`'s ``<<`` and ``append``
methods instead of ``snprintf`` leads to significant code size reductions.
However, there are cases when the incremental code size cost of
:cc:`pw::StringBuilder` is similar to that of ``snprintf``. For example, each
argument to :cc:`pw::StringBuilder`'s ``<<`` method expands to a function call,
but one or two :cc:`pw::StringBuilder` appends may still have a smaller code
size impact than a single ``snprintf`` call. Using :cc:`pw::StringBuilder` error
handling will also impact code size in a way that is comparable to ``snprintf``.
.. include:: string_builder_size_report
Size comparison: snprintf versus pw::string::Format
---------------------------------------------------
The ``pw::string::Format`` functions have a small, fixed code size
cost. However, relative to equivalent ``std::snprintf`` calls, there is no
incremental code size cost to using ``pw::string::Format``.
.. include:: format_size_report