The megaAVR CPU
The megaAVR is an 8-bit RISC CPU that has 4 KiB to 256 KiB of on-chip flash memory where programs are stored. External flash memory is supported, however code can only be executed from the internal flash memory. The AVR naming convention indicates how much flash is on the chip e.g. ATmega 168 has 16 KiB, ATmega 328 has 32 KiB, ATmega 2560 has 256 KiB. There is also up to 16 KiB of static RAM on the CPU for program data and which also holds the chip's registers in the first addressable 96 bytes. The registers are all 8-bit, with the first 32 being processor registers, and the following 64 I/O registers. Note that although the registers have additional opcodes for fast arithmetic and other specialised register functionality, because they are implemented in the single SRAM memory area, programs can, if desired, treat them just the same as regular SRAM storage.In addition to the internal flash and SRAM, the megaAVR typically has up to 4 KiB of traditional EEPROM on the die, but because this is accessed just the same as an external module, using special registers and opcodes, it is is much slower than flash, and is probably only useful for certain 'hard coded' data.