ANS Forth does not specify the sizes of the data types. Instead, it
offers a number of words for computing sizes and doing address
arithmetic. Basically, address arithmetic is performed in terms of
address units (aus); on most systems the address unit is one byte. Note
that a character may have more than one au, so chars is no noop
(on systems where it is a noop, it compiles to nothing).
ANS Forth also defines words for aligning addresses for specific types. Many computers require that accesses to specific data types must only occur at specific addresses; e.g., that cells may only be accessed at addresses divisible by 4. Even if a machine allows unaligned accesses, it can usually perform aligned accesses faster.
For the performance-conscious: alignment operations are usually only necessary during the definition of a data structure, not during the (more frequent) accesses to it.
ANS Forth defines no words for character-aligning addresses. This is not an oversight, but reflects the fact that addresses that are not char-aligned have no use in the standard and therefore will not be created.
The standard guarantees that addresses returned by CREATEd words
are cell-aligned; in addition, Gforth guarantees that these addresses
are aligned for all purposes.
Note that the standard defines a word char, which has nothing to
do with address arithmetic.
chars n1 -- n2 core ``chars''
char+ c-addr1 -- c-addr2 core ``care-plus''
cells n1 -- n2 core ``cells''
cell+ a-addr1 -- a-addr2 core ``cell-plus''
cell -- u gforth ``cell''
align -- core ``align''
aligned c-addr -- a-addr core ``aligned''
floats n1 -- n2 float ``floats''
float+ f-addr1 -- f-addr2 float ``float-plus''
float -- u gforth ``float''
falign -- float ``falign''
faligned c-addr -- f-addr float ``f-aligned''
sfloats n1 -- n2 float-ext ``s-floats''
sfloat+ sf-addr1 -- sf-addr2 float-ext ``s-float-plus''
sfalign -- float-ext ``s-f-align''
sfaligned c-addr -- sf-addr float-ext ``s-f-aligned''
dfloats n1 -- n2 float-ext ``d-floats''
dfloat+ df-addr1 -- df-addr2 float-ext ``d-float-plus''
dfalign -- float-ext ``d-f-align''
dfaligned c-addr -- df-addr float-ext ``d-f-aligned''
maxalign -- float ``maxalign''
maxaligned addr -- f-addr float ``maxaligned''
cfalign -- gforth ``cfalign''
cfaligned addr1 -- addr2 gforth ``cfaligned''
ADDRESS-UNIT-BITS -- n environment ``ADDRESS-UNIT-BITS''
Go to the first, previous, next, last section, table of contents.