AVR Libc Home Page |  | AVR Libc Development Pages
Main Page | User Manual | Library Reference | FAQ | Alphabetical Index | Example Projects

# Benchmarks

The results below can only give a rough estimate of the resources necessary for using certain library functions. There is a number of factors which can both increase or reduce the effort required:

- Expenses for preparation of operands and their stack are not considered.

- In the table, the size includes all additional functions (for example, function to multiply two integers) but they are only linked from the library.

- Expenses of time of performance of some functions essentially depend on parameters of a call, for example, qsort() is recursive, and sprintf() receives parameters in a stack.

- Different versions of the compiler can give a significant difference in code size and execution time. For example, the dtostre() function, compiled with avr-gcc 3.4.6, requires 930 bytes. After transition to avr-gcc 4.2.3, the size become 1088 bytes.

## A few of libc functions.

Avr-gcc version is 4.2.3

The size of function is given in view of all picked up functions. By default Avr-libc is compiled with `-mcall-prologues` option. In brackets the size without taking into account modules of a prologue and an epilogue is resulted. Both of the size can coincide, if function does not cause a prologue/epilogue.

Function | Units | Avr2 | Avr25 | Avr4
atoi ("12345") | Flash bytes Stack bytes MCU clocks | 82 (82) 2 155 | 78 (78) | 74 (74) 2 149
atol ("12345") | Flash bytes Stack bytes MCU clocks | 122 (122) 2 221 | 118 (118) | 118 (118) 2 219
dtostre (1.2345, s, 6, 0) | Flash bytes Stack bytes MCU clocks | 1184 (1072) 17 1313 | 1088 (978) | 1088 (978) 17 1152
dtostrf (1.2345, 15, 6, s) | Flash bytes Stack bytes MCU clocks | 1676 (1564) 36 1608 | 1548 (1438) | 1548 (1438) 36 1443
itoa (12345, s, 10) | Flash bytes Stack bytes MCU clocks | 150 (150) 4 1172 | 134 (134) | 134 (134) 4 1152
ltoa (12345L, s, 10) | Flash bytes Stack bytes MCU clocks | 220 (220) 9 3174 | 200 (200) | 200 (200) 9 3136
malloc (1) | Flash bytes Stack bytes MCU clocks | 554 (554) 4 196 | 506 (506) | 506 (506) 4 178
realloc ((void *)0, 1) | Flash bytes Stack bytes MCU clocks | 1152 (1040) 20 303 | 1042 (932) | 1042 (932) 20 280
qsort (s, sizeof(s), 1, cmp) | Flash bytes Stack bytes MCU clocks | 1242 (1130) 38 20914 | 990 (880) | 1008 (898) 38 16678
sprintf_min (s, "%d", 12345) | Flash bytes Stack bytes MCU clocks | 1216 (1104) 59 1846 | 1090 (980) | 1086 (976) 59 1711
sprintf (s, "%d", 12345) | Flash bytes Stack bytes MCU clocks | 1674 (1562) 58 1610 | 1542 (1432) | 1498 (1388) 58 1528
sprintf_flt (s, "%e", 1.2345) | Flash bytes Stack bytes MCU clocks | 3334 (3222) 66 2513 | 3084 (2974) | 3040 (2930) 66 2297
sscanf_min ("12345", "%d", &i) | Flash bytes Stack bytes MCU clocks | 1540 (1428) 55 1339 | 1354 (1244) | 1354 (1244) 55 1240
sscanf ("12345", "%d", &i) | Flash bytes Stack bytes MCU clocks | 1950 (1838) 53 1334 | 1704 (1594) | 1704 (1594) 53 1235
sscanf ("point,color", "%[a-z]", s) | Flash bytes Stack bytes MCU clocks | 1950 (1838) 87 2878 | 1704 (1594) | 1704 (1594) 87 2718
sscanf_flt ("1.2345", "%e", &x) | Flash bytes Stack bytes MCU clocks | 3298 (3186) 63 2187 | 2934 (2824) | 2918 (2808) 63 1833
strtod ("1.2345", &p) | Flash bytes Stack bytes MCU clocks | 1570 (1458) 22 1237 | 1472 (1362) | 1456 (1346) 22 971
strtol ("12345", &p, 0) | Flash bytes Stack bytes MCU clocks | 942 (830) 29 1074 | 874 (764) | 808 (698) 21 722

## Math functions.

The table contains the number of MCU clocks to calculate a function with a given argument(s). The main reason of a big difference between Avr2 and Avr4 is a hardware multiplication.

Function | Avr2 | Avr4
__addsf3 (1.234, 5.678) | 113 | 108
__mulsf3 (1.234, 5.678) | 375 | 138
__divsf3 (1.234, 5.678) | 466 | 465
acos (0.54321) | 4648 | 2689
asin (0.54321) | 4754 | 2790
atan (0.54321) | 4710 | 2271
atan2 (1.234, 5.678) | 5270 | 2857
ceil (1.2345) | 177 | 177
cos (1.2345) | 3381 | 1665
cosh (1.2345) | 4922 | 2979
exp (1.2345) | 4708 | 2765
fdim (5.678, 1.234) | 111 | 111
floor (1.2345) | 180 | 180
fmax (1.234, 5.678) | 39 | 37
fmin (1.234, 5.678) | 35 | 35
fmod (5.678, 1.234) | 132 | 132
frexp (1.2345, 0) | 37 | 36
hypot (1.234, 5.678) | 1556 | 1078
ldexp (1.2345, 6) | 42 | 42
log (1.2345) | 4142 | 2134
log10 (1.2345) | 4498 | 2260
modf (1.2345, 0) | 433 | 429
pow (1.234, 5.678) | 9293 | 5047
round (1.2345) | 150 | 150
sin (1.2345) | 3347 | 1647
sinh (1.2345) | 4946 | 3003
sqrt (1.2345) | 709 | 704
tan (1.2345) | 4375 | 2420
tanh (1.2345) | 5126 | 3173
trunc (1.2345) | 178 | 178

Automatically generated by Doxygen 1.5.7 on 6 Nov 2008.