AVR microcontrollers are using Harvard architecture. This means that separate memory types (program memory and data memory) are used and connected with distinct buses in this architecture. Such memory architecture allows processors to access program memory and data memory at the same time. This allows increasing the performance of MCU comparing to CISC architecture, where the CPU uses the same bus for accessing program memory and data memory.
Each memory type has its own address space:
For instance few Atmega series memory map examples:
Flash | RAM | EEPROM | ||||
Type | F_END | Size, kB | RAMEND | Size, kB | E_END | Size, kB |
Atmega8 | $0FFF | 8 | $045F | 1 | $1FF | 0.5 |
Atmega32 | $3FFF | 32 | $085F | 2 | $3FF | 1 |
Atmega64 | $7FFF | 64 | $10FF | 4 | $7FF | 2 |
Atmega128 | $FFFF | 128 | $10FF | 4 | $FFF | 4 |
Refer for more information in specific datasheet of your selected MCU.