It is based on:
- initial published memory map posted on this site (which was very incomplete and had many things guessed)
- own findings added
I have tried to make a contigeuous list, i.e. without gaps, that explains why there is '-' here and there, it simply means that I don't know what's there. Most of the time it's "nothing" or another area duplicated, but hey, you never know.
Please check and if possible, add to this!
Please note: at 0x3fffe000 there is an area of 2860 bytes that is never used. It may be used in some SDK function I am not using, who knows. I am using it for a log buffer and it never fails. After this area, this an area of a few bytes that do get overwritten once, somewhere at the beginning of the user application. But it's after user_init2() so I am not sure where exactly this does happen. After that area, seem to be more, smaller, areas that are never used, but I didn't have the guts (nor need...) to use them
esp8266 memory map flash memory map (start from 40100000)
segment size sub size start size start
- 600.02000 I/O
- 600.01800 I/O
- 600.01000 I/O
- 600.00000 I/O
SPI-MAPPED 402.00000 <--- 10000 irom0
icache1 4000 401.0c000 4000 0c000 cache / "dummy when writing composite image"
icache0 4000 401.08000 4000 08000 cache / "dummy when writing composite image"
iram1 8000 401.00000 <--- 8000 00000 iram0
brom 10000 400.00000 stack bottom
- 14cc 3ff.feb34 stack top (grows downwards)
- 8 3ff.feb2c "system data ram #2"
- b2c 3ff.fe000 ram free to use (apparently)
- 2000 3ff.fc000 "system data ram #1"
dram0 18000 14000 3ff.e8000 bss, rodata, data, system heap
- 20000 3ff.c0000
dport0 10 3ff.00000