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. -- Frank Heckenbach, Erlangen, Germany heckenb@mi.uni-erlangen.de Turbo Pascal: http://www.mi.uni-erlangen.de/~heckenb/programs.htm Internet links: http://www.mi.uni-erlangen.de/~heckenb/links.htm
participants (1)
-
Frank Heckenbach