blob: 5e9db9a7c4f6aeb0211c2ac2e93b23e9ea58792b [file] [log] [blame]
.. _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 :cpp:type:`pw::StringBuilder` is smaller than
that of ``std::snprintf``. Using only :cpp:type:`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
:cpp:type:`pw::StringBuilder` is similar to that of ``snprintf``. For example,
each argument to :cpp:type:`pw::StringBuilder`'s ``<<`` method expands to a
function call, but one or two :cpp:type:`pw::StringBuilder` appends may still
have a smaller code size impact than a single ``snprintf`` call. Using
:cpp:type:`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