Steve,
Are you are trying to pre-calculate the addresses of the strings to save
time or something?
One thing to note is that the address of the A$() or D$() array variable
will move around in RAM. However, as long as you don't modify the
strings *in* the array after they are first assigned, then the
"256*PEEK(K+2)+PEEK(K+1)" address values pointing to the actual text
will NOT change. Those addresses will be pointing back to the actual
string text in the BASIC program (which doesn't move around during
program execution).
This is an optimization BASIC makes. When strings are first assigned,
the variable is created with an address pointing to the actual string
text. The initial value simply points to the BASIC program. If the
contents of that string variable are changed after that point, then
BASIC moves the text into high RAM to make the modification. Otherwise
the text simply lives in the BASIC program.
So you could create an array of pre-calculated addresses as follows:
10 DIM A$(3):DIMK(3):A$(0)="blah0":A$(1)="blah1":A$(2)="blah2":A$(3)="blah3"
20 FOR X=0TO3:F=VARPTR(A$(X)):K(X)=256*PEEK(F+2)+PEEK(F+1):NEXT
30 REM
40 REM Now any variable can be created and the values in K() will still
be correct.
Ken
On 5/29/18 9:25 AM, Stephen Adolph wrote:
John, I wasn't able to declare variables in any meaningful way to
solve this problem. Only assignment seemed to work. Do you know a
trick for that?
steve
On Tue, May 29, 2018 at 12:21 PM, John R. Hogerhuis <jho...@pobox.com
<mailto:jho...@pobox.com>> wrote:
On Tue, May 29, 2018 at 5:13 AM Jeffrey Birt
<bir...@soigeneris.com <mailto:bir...@soigeneris.com>> wrote:
>>> Anytime a new scalar (i.e. non-array) variable is created,
the addresses of the array variables must all change to make
room for the new scalar variable.
So BASIC copies all the arrays to a new memory address? That
does not seem very efficient.
Jeff
I think it’s a trade off. Extra levels of indirection are also
inefficient.
It’s either take the hit on a “move” when a variable is created
or take a guaranteed hit every variable access.
And you can avoid the cost by declaring your variables up front.
— John.