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 addresses. 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 CREATE
d 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"
align
-- core "align"
aligned
c-addr -- a-addr core "aligned"
floats
n1 -- n2 float "floats"
float+
f-addr1 -- f-addr2 float "float-plus"
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
-- gforth "maxalign"
maxaligned
addr1 -- addr2 gforth "maxaligned"
cfalign
-- gforth "cfalign"
cfaligned
addr1 -- addr2 gforth "cfaligned"
ADDRESS-UNIT-BITS
-- n environment "ADDRESS-UNIT-BITS"