Windows CE - это 32-битная операционная система. Максимальное 32-битное число определяет максимально допустимый адрес – это 4GB. Адресное пространсво между 2GB и 4GB зарезервировано для самой системы.

Адрессное пространство между 0 и 1GB + 32MB разделено на 33 различных секции. Такие секции называют «слотом процесса». Самый нижний слот обозначают 0, а самый верхний имеет номер 32. Слот 0 используется для активного процесса.
Каждый процесс на
Windows CE получает свои 32MB адресного пространства, которое используется для загрузки
DLL файлов, стеков, кучи и других операций по выделению памяти.
В нулевом 32 мегабайтовом блоке памяти, начиная с адреса 0x02000000, располагаются специальные
DLL файлы – так называемых
eXecute In Place (XIP) – выполнить на месте, без предварительной загрузки в память. Эти
DLL файлы являются частью
ROM (ROM-based DLL).Если процесс загружает какие-то другие DLL, то они грузятся вслед за системными
(ROM-based) DLL – если представлять 32MB процеса так, что больший адрес находится сверху, то системные DLL будут в самом верху, а потом расположаться остальные
DLL загруженные процессом.
Дальше, ниже
DLL, следует свободное пространство, которое занимает куча памяти процеса (или кучи), затем идет стек (или стеки). В самом низу 32MB находится
EXE – исполняемый модуль. Его адрес – это 0x00010000 – 64KB. Ниже этих 64KB – пространство зарезервированое системой.
Относительное сложные приложения, в процесе работы, выделяя и освобождая память, «перемешивают» области памяти и порядок, когда стек следует куче памяти, нарушается. «Смешивание» затрагивает и область с
DLL.
Система, когда увеличивает размер кучи памяти, вызывает
VirtualAlloc с первым параметром равным
NULL.
Windows CE может взять недостающую память и из области загрузки
ROM DLL файлов - только тех, которые на момент сборки системы заданы как загружаемые и выгружаемые.
Когда система создает поток (thread), то для создания стека для потока, также вызывается функция
VirtualAlloc и, также, память может выделяться и из области системных DLL.
Слот 0 – активный процес – это «клон» текущего процеса – если приложение из слота 12 активно, то 12 слот клонируется в слот 0.
Если какой-то процесс загружает
DLL, то адресс загрузки должен быть свободен для всех процесов системы.