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
|
+736 |
||||||||||||||||||||||||||||||||||||||||||
StringBuilder cost when completely replacing snprintf |
FLASH
|
+696 |
||||||||||||||||||||||||||||||||||||||||||
Incremental cost relative to snprintf for 10 strings |
FLASH
|
-112 |
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
|
-40 |
|||||||||||||||
Format instead of snprintf 10 times, handle errors |
FLASH
|
-104 |
|||||||||||||||
Format instead of snprintf 50 times, no error handling |
FLASH
|
-24 |