Memory management
This section is a very short one but not a less important one at all. We have to remember we have the following three pools of memory on Arduino:
Flash memory (program space), where the firmware is stored
Static Random Access Memory (SRAM), where the sketch creates and manipulates variables at runtime
EEPROM is a memory space to store long-term information
Flash and EEPROM, compared to SRAM, are non-volatile, which means the data persists even after the power is turned off. Each different Arduino board has a different amount of memory:
ATMega328 (UNO) has:
Flash 32k bytes (0.5k bytes used by the bootloader)
SRAM 2k bytes
EEPROM 1k bytes
ATMega2560 (MEGA) has:
Flash 256k bytes (8k bytes used by the bootloader)
SRAM 8k bytes
EEPROM 4k bytes
A classic example is to quote a basic declaration of a string:
char text[] = "I love Arduino because it rocks.";
That takes 32 bytes into SRAM. It doesn't seem a lot but with the UNO, you only have 2048 bytes available. Imagine you use a big lookup...