The MemoryBenchmark.ino
was compiled with each FEATURE_*
and the flash
memory and static RAM sizes were recorded. The FEATURE_BASELINE
selection is
the baseline, and its memory usage numbers are subtracted from the subsequent
FEATURE_*
memory usage.
Version: AceTime v2.4.0
DO NOT EDIT: This file was auto-generated using make README.md
.
To regenerate this README.md:
$ make clean_benchmarks
$ make benchmarks
$ make README.md
The make benchmarks
target uses collect.sh
script which calls auniter.sh
(https://github.com/bxparks/AUniter) to invoke the Arduino IDE programmatically.
It produces a *.txt
file with the flash and ram usage information (e.g.
nano.txt
). It now takes about 16 minutes to generate the *.txt
files on my
quad-core Intel Core i7-3840QM CPU @ 2.80GHz laptop.
The make README.md
command calls the generated_readme.py
Python script which
generates this README.md
file. The ASCII tables below are generated by the
generate_table.awk
script, which takes each *.txt
file and converts it to an
ASCII table.
v1.3:
- The
BasicZoneManager
andExtendedZoneManager
classes were unified under a new parent interfaceZoneManager
. This seems to have caused the flash size to increase by around 1200 bytes on the AVR processors (Nano, Pro Micro), about 500 bytes on a SAMD, about 800 bytes on a ESP8266, 100 bytes on a ESP32, and 1400 bytes on a Teensy 3.2. The 8-bit processors suffer the most flash size increase proportional to their limited 32kB limit. - Adding the
ZoneManager
interface simplifies a lot of the complexity with saving and restoring time zones using theTimeZoneData
object, and I think it is worth the extra cost of flash size. The mitigating factor is that applications targetted towards 8-bit processors will normally have fixed number of timezones at compile time, so they can avoid using aZoneManager
, and avoid this penalty in flash size.
v1.4.1+:
- Removed the
ZoneInfo::transitionBufSize
field from theZoneInfo
struct, which saves 1 byte on 8-bit processors (none on 32-bit processors due to 4-byte alignment). We save 266 bytes forBasicZoneManager
and 386 bytes forExtendedZoneManager
when all the zones are loaded into the zone registry. - Incorporated zoneName compression causes flash/ram usage to increase by
~250/120 bytes when using only 1-2 zones, but decreases flash consumption by
1200-2400 bytes when all the zones are loaded into the
ZoneManager
.
v1.5+:
- Changing
ZoneProcessorCache::getType()
from avirtual
to a non-virtual method saves 250-350 bytes of flash memory when using aBasicZoneManager
or anExtendedZoneManager
on an 8-bit AVR processor. Unexpectedly, the flash memory consumption increases slightly (~0-50 bytes) for some ARM processors and the ESP32. Since those processors have far more flash memory, this seems like a good tradeoff. - Changing
BasicZoneProcessor
andExtendedZoneProcessor
to be subclasses of the templatizedBasicZoneProcessorTemplate
andExtendedZoneProcessorTemplate
classes causes reduction of flash consumption by 250-400 bytes for 32-bit processors. Don't know why. (Very little difference for 8-bit AVR). - Adding a
ZoneInfoStore
layer of indirection (to support more complex ZoneProcessors and Brokers) causes flash memory to go up by 100-200 bytes.
v1.6:
- Added support for
LinkRegistry
toBasicZoneManager
andExtendedZoneManager
. This increases the flash memory usage by 150-500 bytes when using one of these classes due to the code required byLinkRegistrar
. This extra cost is incurred even if theLinkRegistry
is set to 0 elements. EachLinkEntry
consumes 8 bytes (2 xuint32_t
). So azonedb::kLinkRegistry
with 183 elements uses 1464 extra bytes of flash; azonedbx::kLinkRegistry
with 207 elements uses 1656 extra bytes.
v1.7:
- The virtual destructor on the
Clock
base class removed. This reduced the flash usage by 618 bytes on AVR processors , 328 bytes on the SAMD21, but only 50-60 bytes on other 32-bit processors. - The various
printShortNameTo()
orprintShortTo()
methods changed to replace the underscore in the zone names (e.g.Los_Angeles
) with spaces (e.g.Los Angeles
) to be more human friendly. This made little difference in the flash memory consumption, except on the ESP32 where it increased by 200-300 bytes.
v1.7.2
- The
SystemClock::clockMillis()
is now non-virtual, using compile-time polymorphism through C++ template, and incorporating the same techniques from AceRoutine v1.3. Saves about 20-40 bytes of flash.
v1.7.5:
ExtendedZoneProcessor.compareTransitionToMatch()
was modified to detect an exact equality between aTransition
and itsMatchingEra
if any of the 3 time stamp versions ('w', 's', 'u') are equal. Adds about 120-150 bytes of flash on 8-bit and 32-bit processors. But removingoriginalTransitionTime
fromTransition
decreases flash usage by about 20 bytes.- Upgrade ESP8266 Boards from 2.7.4 to 3.0.2. Flash consumption increases by 3-5 kB across the board.
- Upgrade Teensyduino from 1.54 to 1.55. Add memory consumed by
malloc()
andfree()
when using classes with virtual methods into baseline MemoryBenchmark, reducing the actual memory usage of various features by ~3kB.
v1.8.0:
- Move Clock and SystemClock benchmarks into AceTimeClock v1.0.0.
- Extract thin links from BasicZoneManager and ExtendedZoneManager into
new BasicLinkManager and ExtendedLinkManager classes.
- Saves 200-500 bytes of flash for BasicZoneManager and ExtendedZoneManager.
- Applications can decide whether to use thin links through the LinkManager
(~2000 flash bytes for AVR) or use fat links through the
kZoneAndLinkRegistry
(~5000 flash bytes for AVR).
- Create various test objects as global variables instead of stack variables to get a more accurate measurement of their static memory consumption.
v1.9.0:
- Reduce flash usage of
BasicZoneManager
andExtendedZoneManager
by 1100-1300 bytes on AVR processors:- Extract
BasicZoneProcessorCache
andExtendedZoneProcessorCache
out ofBasicZoneManager
andExtendedZoneManager
, making them non-templatized. - Remove all
virtual
methods fromZoneManager
, making the ZoneManager hierarchy non-polymorphic. - Looks like I am reverting some of the changes made in v1.3 when I created
the
ZoneManager
interface.
- Extract
- Reduce flash usage of
BasicLinkManager
andExtendedLinkManager
by 68 bytes on AVR processors by removing purevirtual
methods onLinkManager
base class. - Increase flash usage by 34 bytes on AVR processors due to slight refactoring
of
getHighWater()
withgetAllocSize()
. Only 4-8 bytes increase on 32-bit processors.
v1.10.0:
- Remove support for SAMD21 boards.
- Arduino IDE 1.8.19 with SparkFun SAMD 1.8.6 can no longer upload binaries to these boards. Something about bossac 1.7.0 not found.
- Add memory consumption benchmarks for
ZoneSorterByName
andZoneSorterByOffsetAndName
forBasicZoneManager
andExtendedZoneManager
.- AVR: 180-530 bytes of flash
- 32-bit: 120-600 bytes of flash
- Upgrade tool chain:
- Arduino IDE from 1.8.13 to 1.8.19
- Arduino AVR from 1.8.3 to 1.8.4
- STM32duino from 2.0.0 to 2.2.0
- ESP32 from 1.0.6 to 2.0.2
- Teensyduino from 1.55 to 1.56
- Add support for
fold
parameter inLocalDateTime
,OffsetDateTime
,ZonedDateTime
, andExtendedZoneProcessor
. Increases flash usage:- AVR:
- ~600 bytes, in
ExtendedZoneProcessor
for additional search logic, - ~150 bytes,
BasicZoneProcessor
, to carry along thefold
parameter
- ~600 bytes, in
- most 32-bit: 400-600 bytes
- Teensy: 1300 bytes (no idea why)
- AVR:
v1.11.0
- Upgrade ZoneInfo database so that Links are symbolic links to Zones, instead
of hard links to Zones.
- Allows Links to know whether they are links.
- Allows extraction of the zoneId and zoneNames of the target Zone.
- AVR: Increases flash consumption by ~270 bytes.
- STM32: Increases flash by 120-150 bytes.
- ESP8266: Increases flash by 250-300 bytes.
- ESP32: Increases flash by ~190 bytes.
- Teensy 3.2: Increase flash by 450-1300 bytes.
v1.11.1
- Change
ZoneInfoBroker::targetZoneInfo()
method to return aZoneInfoBroker
instead of rawZoneInfo*
pointer.- Increases flash usage by 4-16 bytes for the most part.
v1.11.5
- Upgrade tool chain
- Arduino CLI from 0.20.2 to 0.27.1
- Arduino AVR Boards from 1.8.4 to 1.8.5
- STM32duino from 2.2.0 to 2.3.0
- ESP32 Boards from 2.0.2 to 2.0.5
- Teensyduino from 1.56 to 1.57
- Upgrade TZDB from 2022b to 2022d
v2.0
- Use
int16_t
year fields. - Implement adjustable epoch year.
- Upgrade to TZDB 2022f.
- AVR:
- BasicZoneManager increases ~200 bytes
- ExtendedZoneManager increases ~500 bytes
zonedb
increases ~1.5 kiBzonedbx
increases ~3 kiB
- ESP8266
- BasicZoneManager increases ~50 bytes
- ExtendedZoneManager increases ~150 bytes
zonedb
increases ~300 byteszonedbx
increases ~1.5 kiB
v2.0.1
- Upgrade to TZDB 2022g.
- Incorporate
ZonedExtra
to replace variousTimeZone
methods.
v2.1.0
- Remove
LinkManager
andLinkRegistry
. - Unify links, adding an additional
targetInfo
field inZoneInfo
.- Increases flash by ~1kB on 8-bit and ~2kB on 32-bit for ~600 zones.
v2.1.1+
- Simplify ZoneRule.letter handling to use ZoneRule.letterIndex for all letters,
not just ones over 1 character long. On 8-bit AVR:
- BasicZoneProcessor
- Increases flash consumption for 1-2 zones by ~200 bytes.
- No change for the full TZ database.
- ExtendedZoneProcessor
- No change for 1-2 zones.
- Decreases flash consumption by ~300 bytes for full TZ database.
- BasicZoneProcessor
v2.2.0
- Upgrade tool chain
- Arduino AVR from 1.8.5 to 1.8.6
- STM32duino from 2.3.0 to 2.4.0
- ESP8266 from 3.0.2 to 3.1.2 failed, reverted back to 3.0.2
- ESP32 from 2.0.5 to 2.0.7
- Add support for Seeed XIAO SAMD21
- Using Seeeduino SAMD Boards 1.8.3
- Upgrade to TZDB 2023b
v2.2.2
- Upgrade to TZDB 2023c
v2.2.3
- Add support for Adafruit ItsyBitsy M4
- Using Adafruit SAMD Boards 1.7.11
- Remove Teensy 3.2
- Nearing end of life. Moved to Tier 2 (should work).
- Upgrade tool chain
- Seeeduino SAMD Boards 1.8.4
- STM32duino Boards 2.5.0
- ESP32 Boards 2.0.9
v2.3.0
- Implement 1-second resolution in ExtendedZoneProcessor (decoupled from
zonedbx storage format).
- Increases flash usage by ~1kB on 8-bit processors, but only 0-100 bytes on 32-bit processors.
- Enables it to be also used as the CompleteZoneProcessor class.
- Implement CompleteZoneProcessor as a specialization of ExtendedZoneProcessor.
- Enables the creation of
zonedbc
database which contains all TZDB timezones, for all years going back to 1844, the earliest transition in the TZDB. - The flash consumption of zonedbc is roughly 2X of zonedbx.
- Enables the creation of
- Revert
zonedb
to use 8-bit year fields.- Increases flash memory consumption for BasicZoneManager w/ 1 zone by around 150 bytes.
- Decreases flash memory cosumption for BasicZoneManager w/ all timezones by 800-900 bytes.
- Revert
zonedbx
to use 8-bit year fields.- Increase flash memory consumption of ExtendedZoneManager w/ 1 zone by around 220 bytes.
- Decreases flash memory cosumption for ExtendedZoneManager w/ all timezones by ~2000 bytes.
- Move ZoneContext and its string arrays into PROGMEM.
- Reduces RAM usage by 150-200 bytes on AVR and ESP8266 processors.
- Merge
createAbbreviation()
of BasicZoneProcessor and ExtendedZoneProcessorBasicZoneProcessor
: Slight (30-60 bytes) increase in flash memory, no change in RAM usage.ExtendedZoneProcessor
: Slight (30-60 bytes) increase in flash memory. But saves ~16 bytes of RAM for 8-bit, ~64 bytes of RAM for 32-bit.
- Support multi-character
ZoneRule.letter
field- Enables
Africa/Windhoek
andAmerica/Belize
in thezonedb
database used withBasicZoneProcessor
. - Increases flash memory for
zonedb
by ~150 bytes on 8-bit, ~200 on 32-bit processors.
- Enables
v2.4.0
- Support %z format.
- Upgrade to TZDB 2024b.
- Upgrade Arduino CLI to 1.1.1
- AVR:
- BasicZoneManager increases ~600 bytes
- ExtendedZoneManager increases ~700 bytes
zonedb
decreases ~400 byteszonedbx
decreases ~350 bytes
- ESP8266
- BasicZoneManager increases ~500 bytes
- ExtendedZoneManager increases ~400 bytes
zonedb
decreases ~300 byteszonedbx
decreases ~100 kiB
- [1] Delta flash and ram consumption for
Basic ZoneSorterByName
andBasic ZoneSorterByOffsetAndName
are calculated by subtracting theBasicZoneManager (1 zone)
numbers, to isolate the memory consumption of just the sorter classes. - [2] Delta flash and ram consumption for
Extended ZoneSorterByName
andExtended ZoneSorterByOffsetAndName
are calculated by subtracting theExtendedZoneManager (1 zone)
numbers, to isolate the memory consumption of just the sorter classes. - [3] Delta flash and ram consumption for
Complete ZoneSorterByName
andComplete ZoneSorterByOffsetAndName
are calculated by subtracting theCompleteZoneManager (1 zone)
numbers, to isolate the memory consumption of just the sorter classes. - An entry of
-1
indicates that the memory usage exceeded the maximum of the microcontroller and the compiler did not generate the desired information.
- 16MHz ATmega328P
- Arduino IDE 1.8.19, Arduino CLI 1.1.1
- Arduino AVR Boards 1.8.6
+----------------------------------------------------------------------+
| Functionality | flash/ ram | delta |
|----------------------------------------+--------------+--------------|
| baseline | 474/ 11 | 0/ 0 |
|----------------------------------------+--------------+--------------|
| LocalDateTime | 1108/ 21 | 634/ 10 |
| ZonedDateTime | 1444/ 30 | 970/ 19 |
| Manual ZoneManager | 1406/ 13 | 932/ 2 |
|----------------------------------------+--------------+--------------|
| Basic TimeZone (1 zone) | 8238/ 225 | 7764/ 214 |
| Basic TimeZone (2 zones) | 8784/ 379 | 8310/ 368 |
| BasicZoneManager (1 zone) | 8448/ 236 | 7974/ 225 |
| BasicZoneManager (all zones) | 19646/ 386 | 19172/ 375 |
| BasicZoneManager (all zones+links) | 25254/ 386 | 24780/ 375 |
|----------------------------------------+--------------+--------------|
| Basic ZoneSorterByName [1] | 9222/ 238 | 774/ 2 |
| Basic ZoneSorterByOffsetAndName [1] | 9344/ 238 | 896/ 2 |
|----------------------------------------+--------------+--------------|
| Extended TimeZone (1 zone) | 12072/ 643 | 11598/ 632 |
| Extended TimeZone (2 zones) | 12670/ 1215 | 12196/ 1204 |
| ExtendedZoneManager (1 zone) | 12252/ 649 | 11778/ 638 |
| ExtendedZoneManager (all zones) | 34680/ 847 | 34206/ 836 |
| ExtendedZoneManager (all zones+links) | 40940/ 847 | 40466/ 836 |
|----------------------------------------+--------------+--------------|
| Extended ZoneSorterByName [2] | 13022/ 651 | 770/ 2 |
| Extended ZoneSorterByOffsetAndName [2] | 13116/ 651 | 864/ 2 |
|----------------------------------------+--------------+--------------|
| Complete TimeZone (1 zone) | -1/ -1 | -1/ -1 |
| Complete TimeZone (2 zones) | -1/ -1 | -1/ -1 |
| CompleteZoneManager (1 zone) | -1/ -1 | -1/ -1 |
| CompleteZoneManager (all zones) | -1/ -1 | -1/ -1 |
| CompleteZoneManager (all zones+links) | -1/ -1 | -1/ -1 |
|----------------------------------------+--------------+--------------|
| Complete ZoneSorterByName [3] | -1/ -1 | 0/ 0 |
| Complete ZoneSorterByOffsetAndName [3] | -1/ -1 | 0/ 0 |
+---------------------------------------------------------------------+
- 16 MHz ATmega32U4
- Arduino IDE 1.8.19, Arduino CLI 1.1.1
- SparkFun AVR Boards 1.1.13
+----------------------------------------------------------------------+
| Functionality | flash/ ram | delta |
|----------------------------------------+--------------+--------------|
| baseline | 3470/ 153 | 0/ 0 |
|----------------------------------------+--------------+--------------|
| LocalDateTime | 4080/ 161 | 610/ 8 |
| ZonedDateTime | 4416/ 170 | 946/ 17 |
| Manual ZoneManager | 4400/ 153 | 930/ 0 |
|----------------------------------------+--------------+--------------|
| Basic TimeZone (1 zone) | 11210/ 365 | 7740/ 212 |
| Basic TimeZone (2 zones) | 11738/ 517 | 8268/ 364 |
| BasicZoneManager (1 zone) | 11420/ 376 | 7950/ 223 |
| BasicZoneManager (all zones) | 22618/ 526 | 19148/ 373 |
| BasicZoneManager (all zones+links) | 28226/ 526 | 24756/ 373 |
|----------------------------------------+--------------+--------------|
| Basic ZoneSorterByName [1] | 12194/ 378 | 774/ 2 |
| Basic ZoneSorterByOffsetAndName [1] | 12316/ 378 | 896/ 2 |
|----------------------------------------+--------------+--------------|
| Extended TimeZone (1 zone) | 15028/ 783 | 11558/ 630 |
| Extended TimeZone (2 zones) | 15624/ 1353 | 12154/ 1200 |
| ExtendedZoneManager (1 zone) | 15208/ 789 | 11738/ 636 |
| ExtendedZoneManager (all zones) | 37652/ 987 | 34182/ 834 |
| ExtendedZoneManager (all zones+links) | 43912/ 987 | 40442/ 834 |
|----------------------------------------+--------------+--------------|
| Extended ZoneSorterByName [2] | 15978/ 791 | 770/ 2 |
| Extended ZoneSorterByOffsetAndName [2] | 16072/ 791 | 864/ 2 |
|----------------------------------------+--------------+--------------|
| Complete TimeZone (1 zone) | -1/ -1 | -1/ -1 |
| Complete TimeZone (2 zones) | -1/ -1 | -1/ -1 |
| CompleteZoneManager (1 zone) | -1/ -1 | -1/ -1 |
| CompleteZoneManager (all zones) | -1/ -1 | -1/ -1 |
| CompleteZoneManager (all zones+links) | -1/ -1 | -1/ -1 |
|----------------------------------------+--------------+--------------|
| Complete ZoneSorterByName [3] | -1/ -1 | 0/ 0 |
| Complete ZoneSorterByOffsetAndName [3] | -1/ -1 | 0/ 0 |
+---------------------------------------------------------------------+
- SAMD21, 48 MHz ARM Cortex-M0+
- Arduino IDE 1.8.19, Arduino CLI 1.1.1
- Seeeduino SAMD Boards 1.8.4
+----------------------------------------------------------------------+
| Functionality | flash/ ram | delta |
|----------------------------------------+--------------+--------------|
| baseline | 34068/ 0 | 0/ 0 |
|----------------------------------------+--------------+--------------|
| LocalDateTime | 34372/ 0 | 304/ 0 |
| ZonedDateTime | 35116/ 0 | 1048/ 0 |
| Manual ZoneManager | 35100/ 0 | 1032/ 0 |
|----------------------------------------+--------------+--------------|
| Basic TimeZone (1 zone) | 39204/ 0 | 5136/ 0 |
| Basic TimeZone (2 zones) | 39564/ 0 | 5496/ 0 |
| BasicZoneManager (1 zone) | 39308/ 0 | 5240/ 0 |
| BasicZoneManager (all zones) | 54588/ 0 | 20520/ 0 |
| BasicZoneManager (all zones+links) | 63212/ 0 | 29144/ 0 |
|----------------------------------------+--------------+--------------|
| Basic ZoneSorterByName [1] | 39804/ 0 | 496/ 0 |
| Basic ZoneSorterByOffsetAndName [1] | 39868/ 0 | 560/ 0 |
|----------------------------------------+--------------+--------------|
| Extended TimeZone (1 zone) | 41236/ 0 | 7168/ 0 |
| Extended TimeZone (2 zones) | 41596/ 0 | 7528/ 0 |
| ExtendedZoneManager (1 zone) | 41340/ 0 | 7272/ 0 |
| ExtendedZoneManager (all zones) | 71548/ 0 | 37480/ 0 |
| ExtendedZoneManager (all zones+links) | 81148/ 0 | 47080/ 0 |
|----------------------------------------+--------------+--------------|
| Extended ZoneSorterByName [2] | 41828/ 0 | 488/ 0 |
| Extended ZoneSorterByOffsetAndName [2] | 41892/ 0 | 552/ 0 |
|----------------------------------------+--------------+--------------|
| Complete TimeZone (1 zone) | 41604/ 0 | 7536/ 0 |
| Complete TimeZone (2 zones) | 42828/ 0 | 8760/ 0 |
| CompleteZoneManager (1 zone) | 41708/ 0 | 7640/ 0 |
| CompleteZoneManager (all zones) | 120788/ 0 | 86720/ 0 |
| CompleteZoneManager (all zones+links) | 130388/ 0 | 96320/ 0 |
|----------------------------------------+--------------+--------------|
| Complete ZoneSorterByName [3] | 42196/ 0 | 488/ 0 |
| Complete ZoneSorterByOffsetAndName [3] | 42252/ 0 | 544/ 0 |
+---------------------------------------------------------------------+
- STM32F103C8, 72 MHz ARM Cortex-M3
- Arduino IDE 1.8.19, Arduino CLI 1.1.1
- STM32duino 2.5.0
+----------------------------------------------------------------------+
| Functionality | flash/ ram | delta |
|----------------------------------------+--------------+--------------|
| baseline | 21348/ 4376 | 0/ 0 |
|----------------------------------------+--------------+--------------|
| LocalDateTime | 21704/ 4392 | 356/ 16 |
| ZonedDateTime | 21784/ 4408 | 436/ 32 |
| Manual ZoneManager | 22360/ 4384 | 1012/ 8 |
|----------------------------------------+--------------+--------------|
| Basic TimeZone (1 zone) | 26404/ 4592 | 5056/ 216 |
| Basic TimeZone (2 zones) | 26776/ 4800 | 5428/ 424 |
| BasicZoneManager (1 zone) | 26524/ 4612 | 5176/ 236 |
| BasicZoneManager (all zones) | 42180/ 4612 | 20832/ 236 |
| BasicZoneManager (all zones+links) | 51080/ 4612 | 29732/ 236 |
|----------------------------------------+--------------+--------------|
| Basic ZoneSorterByName [1] | 26992/ 4616 | 468/ 4 |
| Basic ZoneSorterByOffsetAndName [1] | 27076/ 4616 | 552/ 4 |
|----------------------------------------+--------------+--------------|
| Extended TimeZone (1 zone) | 28188/ 5148 | 6840/ 772 |
| Extended TimeZone (2 zones) | 28564/ 5912 | 7216/ 1536 |
| ExtendedZoneManager (1 zone) | 28304/ 5156 | 6956/ 780 |
| ExtendedZoneManager (all zones) | 59096/ 5156 | 37748/ 780 |
| ExtendedZoneManager (all zones+links) | 69040/ 5156 | 47692/ 780 |
|----------------------------------------+--------------+--------------|
| Extended ZoneSorterByName [2] | 28768/ 5160 | 464/ 4 |
| Extended ZoneSorterByOffsetAndName [2] | 28840/ 5160 | 536/ 4 |
|----------------------------------------+--------------+--------------|
| Complete TimeZone (1 zone) | 28568/ 5148 | 7220/ 772 |
| Complete TimeZone (2 zones) | 29804/ 5912 | 8456/ 1536 |
| CompleteZoneManager (1 zone) | 28684/ 5156 | 7336/ 780 |
| CompleteZoneManager (all zones) | 108204/ 5156 | 86856/ 780 |
| CompleteZoneManager (all zones+links) | 118148/ 5156 | 96800/ 780 |
|----------------------------------------+--------------+--------------|
| Complete ZoneSorterByName [3] | 29148/ 5160 | 464/ 4 |
| Complete ZoneSorterByOffsetAndName [3] | 29220/ 5160 | 536/ 4 |
+---------------------------------------------------------------------+
- SAMD51, 120 MHz ARM Cortex-M4
- Arduino IDE 1.8.19, Arduino CLI 1.1.1
- Adafruit SAMD 1.7.11
+----------------------------------------------------------------------+
| Functionality | flash/ ram | delta |
|----------------------------------------+--------------+--------------|
| baseline | 10580/ 0 | 0/ 0 |
|----------------------------------------+--------------+--------------|
| LocalDateTime | 10872/ 0 | 292/ 0 |
| ZonedDateTime | 11544/ 0 | 964/ 0 |
| Manual ZoneManager | 11536/ 0 | 956/ 0 |
|----------------------------------------+--------------+--------------|
| Basic TimeZone (1 zone) | 15640/ 0 | 5060/ 0 |
| Basic TimeZone (2 zones) | 16008/ 0 | 5428/ 0 |
| BasicZoneManager (1 zone) | 15760/ 0 | 5180/ 0 |
| BasicZoneManager (all zones) | 31044/ 0 | 20464/ 0 |
| BasicZoneManager (all zones+links) | 39664/ 0 | 29084/ 0 |
|----------------------------------------+--------------+--------------|
| Basic ZoneSorterByName [1] | 16248/ 0 | 488/ 0 |
| Basic ZoneSorterByOffsetAndName [1] | 16300/ 0 | 540/ 0 |
|----------------------------------------+--------------+--------------|
| Extended TimeZone (1 zone) | 17452/ 0 | 6872/ 0 |
| Extended TimeZone (2 zones) | 17828/ 0 | 7248/ 0 |
| ExtendedZoneManager (1 zone) | 17568/ 0 | 6988/ 0 |
| ExtendedZoneManager (all zones) | 47784/ 0 | 37204/ 0 |
| ExtendedZoneManager (all zones+links) | 57384/ 0 | 46804/ 0 |
|----------------------------------------+--------------+--------------|
| Extended ZoneSorterByName [2] | 18056/ 0 | 488/ 0 |
| Extended ZoneSorterByOffsetAndName [2] | 18108/ 0 | 540/ 0 |
|----------------------------------------+--------------+--------------|
| Complete TimeZone (1 zone) | 17792/ 0 | 7212/ 0 |
| Complete TimeZone (2 zones) | 19028/ 0 | 8448/ 0 |
| CompleteZoneManager (1 zone) | 17908/ 0 | 7328/ 0 |
| CompleteZoneManager (all zones) | 96988/ 0 | 86408/ 0 |
| CompleteZoneManager (all zones+links) | 106596/ 0 | 96016/ 0 |
|----------------------------------------+--------------+--------------|
| Complete ZoneSorterByName [3] | 18396/ 0 | 488/ 0 |
| Complete ZoneSorterByOffsetAndName [3] | 18444/ 0 | 536/ 0 |
+---------------------------------------------------------------------+
- NodeMCU 1.0, 80MHz ESP8266
- Arduino IDE 1.8.19, Arduino CLI 1.1.1
- ESP8266 Boards 3.0.2
+----------------------------------------------------------------------+
| Functionality | flash/ ram | delta |
|----------------------------------------+--------------+--------------|
| baseline | 260089/27892 | 0/ 0 |
|----------------------------------------+--------------+--------------|
| LocalDateTime | 260613/27912 | 524/ 20 |
| ZonedDateTime | 261573/27928 | 1484/ 36 |
| Manual ZoneManager | 261553/27900 | 1464/ 8 |
|----------------------------------------+--------------+--------------|
| Basic TimeZone (1 zone) | 267625/28292 | 7536/ 400 |
| Basic TimeZone (2 zones) | 268025/28500 | 7936/ 608 |
| BasicZoneManager (1 zone) | 267785/28316 | 7696/ 424 |
| BasicZoneManager (all zones) | 283465/28316 | 23376/ 424 |
| BasicZoneManager (all zones+links) | 292361/28316 | 32272/ 424 |
|----------------------------------------+--------------+--------------|
| Basic ZoneSorterByName [1] | 268521/28316 | 736/ 0 |
| Basic ZoneSorterByOffsetAndName [1] | 268665/28316 | 880/ 0 |
|----------------------------------------+--------------+--------------|
| Extended TimeZone (1 zone) | 270073/28900 | 9984/ 1008 |
| Extended TimeZone (2 zones) | 270489/29660 | 10400/ 1768 |
| ExtendedZoneManager (1 zone) | 270217/28908 | 10128/ 1016 |
| ExtendedZoneManager (all zones) | 301033/28908 | 40944/ 1016 |
| ExtendedZoneManager (all zones+links) | 310985/28908 | 50896/ 1016 |
|----------------------------------------+--------------+--------------|
| Extended ZoneSorterByName [2] | 270969/28908 | 752/ 0 |
| Extended ZoneSorterByOffsetAndName [2] | 271017/28908 | 800/ 0 |
|----------------------------------------+--------------+--------------|
| Complete TimeZone (1 zone) | 270393/29092 | 10304/ 1200 |
| Complete TimeZone (2 zones) | 271673/29852 | 11584/ 1960 |
| CompleteZoneManager (1 zone) | 270537/29100 | 10448/ 1208 |
| CompleteZoneManager (all zones) | 350089/29100 | 90000/ 1208 |
| CompleteZoneManager (all zones+links) | 360041/29100 | 99952/ 1208 |
|----------------------------------------+--------------+--------------|
| Complete ZoneSorterByName [3] | 271289/29100 | 752/ 0 |
| Complete ZoneSorterByOffsetAndName [3] | 271337/29100 | 800/ 0 |
+---------------------------------------------------------------------+
- ESP32-01 Dev Board, 240 MHz Tensilica LX6
- Arduino IDE 1.8.19, Arduino CLI 1.1.1
- ESP32 Boards 2.0.9
+----------------------------------------------------------------------+
| Functionality | flash/ ram | delta |
|----------------------------------------+--------------+--------------|
| baseline | 228345/21976 | 0/ 0 |
|----------------------------------------+--------------+--------------|
| LocalDateTime | 230805/21984 | 2460/ 8 |
| ZonedDateTime | 231785/22000 | 3440/ 24 |
| Manual ZoneManager | 231797/21976 | 3452/ 0 |
|----------------------------------------+--------------+--------------|
| Basic TimeZone (1 zone) | 236409/22184 | 8064/ 208 |
| Basic TimeZone (2 zones) | 236845/22392 | 8500/ 416 |
| BasicZoneManager (1 zone) | 236561/22208 | 8216/ 232 |
| BasicZoneManager (all zones) | 252225/22208 | 23880/ 232 |
| BasicZoneManager (all zones+links) | 261121/22208 | 32776/ 232 |
|----------------------------------------+--------------+--------------|
| Basic ZoneSorterByName [1] | 237113/22208 | 552/ 0 |
| Basic ZoneSorterByOffsetAndName [1] | 237193/22208 | 632/ 0 |
|----------------------------------------+--------------+--------------|
| Extended TimeZone (1 zone) | 238521/22744 | 10176/ 768 |
| Extended TimeZone (2 zones) | 238941/23504 | 10596/ 1528 |
| ExtendedZoneManager (1 zone) | 238657/22752 | 10312/ 776 |
| ExtendedZoneManager (all zones) | 269457/22752 | 41112/ 776 |
| ExtendedZoneManager (all zones+links) | 279393/22752 | 51048/ 776 |
|----------------------------------------+--------------+--------------|
| Extended ZoneSorterByName [2] | 239209/22752 | 552/ 0 |
| Extended ZoneSorterByOffsetAndName [2] | 239285/22752 | 628/ 0 |
|----------------------------------------+--------------+--------------|
| Complete TimeZone (1 zone) | 238857/22744 | 10512/ 768 |
| Complete TimeZone (2 zones) | 240129/23504 | 11784/ 1528 |
| CompleteZoneManager (1 zone) | 238993/22752 | 10648/ 776 |
| CompleteZoneManager (all zones) | 318513/22752 | 90168/ 776 |
| CompleteZoneManager (all zones+links) | 328465/22752 | 100120/ 776 |
|----------------------------------------+--------------+--------------|
| Complete ZoneSorterByName [3] | 239545/22752 | 552/ 0 |
| Complete ZoneSorterByOffsetAndName [3] | 239617/22752 | 624/ 0 |
+---------------------------------------------------------------------+