Peter Gerwinski wrote:
(Is it generally allowed to cast a pointer into an integer, in the first place?)
I just found out that on the DEC Alpha a pointer has 8 bytes, while an integer has 4.
Good that I didn't use this "feature" yet.
I'm briefly describing the situation I have. It's about speed optimization. I have the following (simplified):
type t=array[0..max] of integer;
function f(var a:t):integer; var i:integer; begin i:=0; {some loop} if {...} then begin a[i]:=...; inc(i) end; {...} f:=i end.
I thought about optimizing it with a pointer like this:
function f(var a:t):integer; var p:^integer; begin p:=@a[0]; {some loop} if {...} then begin p^:=...; inc(p) {is this ok, BTW?} end; {...} f:="offset of p in a" end.
So "f:=(integer(p)-integer(@a)) div sizeof(a[0])" doesn't seem to work then. Or are other means of pointer arithmetic available -- or completely other ways to do it?
I know that all of this is not very "Pascalish", but this routine requires the utmost speed possible, so I tried to elimitate the need for an array lookup, and to save one register (only p instead of i and the address of a) -- this really does make a difference since the rest of the loops uses some more variables. I hope I don't have to convert the routine into C to get the best speed.