Code Size Analysis#
pw_string: Efficient, easy, and safe string manipulation
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 pw::StringBuilder
is smaller than
that of std::snprintf
. Using only 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
pw::StringBuilder
is similar to that of snprintf
. For example,
each argument to pw::StringBuilder
’s <<
method expands to a
function call, but one or two pw::StringBuilder
appends may still
have a smaller code size impact than a single snprintf
call. Using
pw::StringBuilder
error handling will also impact code size in a
way that is comparable to snprintf
.
Label |
Segment |
Delta |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Total StringBuilder cost when used alongside snprintf |
FLASH
|
+1,568 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
StringBuilder cost when completely replacing snprintf |
FLASH
|
+696 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Incremental cost relative to snprintf for 10 strings |
FLASH
|
-40 |
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
.
Label |
Segment |
Delta |
||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Format instead of snprintf once, return size |
FLASH
|
+88 |
||||||||||||||||||||||||
Format instead of snprintf 10 times, handle errors |
FLASH
|
+32 |
||||||||||||||||||||||||
Format instead of snprintf 50 times, no error handling |
FLASH
|
+96 |