Суть такая:
1) ни одна программа не может работать напрямую с памятью, исключение составляет память из Heap, но в любом случае этот адрес идёт от системы, система указывает программе где находится её heap.
2) программа резервирует любое количество памяти с точностью до байта трёхбайтовым указателем.
3) Разделяются блоки данных (которые хранятся где угодно) и программа (тело и heap), последнее всегда доступно прямым обращением (п. 1).
4) Блоки данных необходимо запрашивать у системы:
4.А) New(p: pointer, Length [3 байта], Mode [режим Share - только для владельца или для всех ]) - выделение блока памяти.
4.Б) GetReadMem(p: pointer, OffSet: pointer[3 байта], Length [2 байта]) - получение памяти на чтение, перед получением памяти данный блок копируется из верхней области в окно обмена.
4.В) GetRWMem(синтаксис аналогично 4.б) - получение памяти на запись, после того как данный кусок обработан он копируется в оригинальное место расположения.
4.Г) EndGetReadMem(p: pointer) - освобождается окно обмена, чтение из области данных закончена.
4.Д) EndGetRWMem(p: pointer) - освобождается окно обмена область копируется в исходное место.
5) Адрес окна возвращается системой (менеджером памяти).
6) В случае невозможности выделить блок возвращается сообщение об ошибке.