5.7.1 ANS Forth and Gforth memory models

ANS Forth considers a Forth system as consisting of several address
spaces, of which only data space is managed and accessible with
the memory words. Memory not necessarily in data space includes the
stacks, the code (called code space) and the headers (called name
space). In Gforth everything is in data space, but the code for the
primitives is usually read-only.

Data space is divided into a number of areas: The (data space portion of
the) dictionary1, the heap, and a number of system-allocated
buffers.

In ANS Forth data space is also divided into contiguous regions. You
can only use address arithmetic within a contiguous region, not between
them. Usually each allocation gives you one contiguous region, but the
dictionary allocation words have additional rules (see Dictionary allocation).

Gforth provides one big address space, and address arithmetic can be
performed between any addresses. However, in the dictionary headers or
code are interleaved with data, so almost the only contiguous data space
regions there are those described by ANS Forth as contiguous; but you
can be sure that the dictionary is allocated towards increasing
addresses even between contiguous regions. The memory order of
allocations in the heap is platform-dependent (and possibly different
from one run to the next).

Footnotes

[1] Sometimes, the term dictionary is used to
refer to the search data structure embodied in word lists and headers,
because it is used for looking up names, just as you would in a
conventional dictionary.