Search code examples
memory-managementforth

Is it okay to use dictionary memory without 'allot'?


I am doing a programming exercise where I'm trying to do the same thing in different ways. (I happen to be adding two 3 element vectors together in Forth). In one of my revisions I used the return stack to store temporary values (so I am using that feature), but in addition to that I am considering using un-allocated memory as temporary storage.

I created two words to access this memory:

: front! here + ! ;
: front@ here + @ ;

I tried it in my experiment, and it seemed to work for what I was doing. I don't have any intention to use this memory after my routines are done. And I am living in dictionary, of which memory has already been given to the program.

But, my gut still tells me that this is a bad thing to do. Is this such a bad thing?

If it matters, I'm using Gforth.


Solution

  • Language-lawyer strictly speaking, no. ANS Forth 3.3.3.2 states:

    A program may perform address arithmetic within contiguously allocated regions.

    You are performing address arithmetic outside any allocated region.

    However, it might be perfectly fine in some particular implementation. Such as gforth.

    Note that there is a word called PAD, which returns an address to a temporary memory region.