Does CREATE waste space?

33 Views Asked by At

In gforth, CREATE, by itself, creates a variable, which takes some memory space: a few bytes to store the value plus two instructions to put the address on the stack and return:

create a  ok
42 a !  ok
a @ . 42  ok

If instead of a variable you want to create an 80-byte buffer, you can write

: TAMPON CREATE 80 ALLOT DOES> + ;

but those 80 bytes would come after the bytes taken by CREATE for the default variable, which is a waste.

Does CREATE waste space or am I missing something?

1

There are 1 best solutions below

2
ruvim On BEST ANSWER

CREATE does not waste space. It "does not allocate data space in name's data field" (see 6.1.1000 CREATE).

This example shows incorrect usage:

create a
42 a !
a @ .

At this moment, a and here returns the same address:

a here = . \ it prints "-1"

So you have to reserve required space before use:

1 cells allot
a cell+ here = . \ it prints "-1"