On 19 Jan 2010, at 15:14, Marco van de Voort wrote:

Hmm, under delphi at least, it is cheaper to do

var pstart,pend : PSomeType;

if length(sometypedynarray)>0 then
 begin
   pstart:=...@sometypedynarray[0];
   peind :=...@sometypedynarray[length(sometypedynarray)-1];
   while (pstart<=peind) do
     begin
       operate_on(pstart);
       inc(pstart);
     end;
 end;

then for i over a dynarray, even if sometype is a simple type.

I can't imagine why that would be any faster than a simple for-loop, except for an implementation detail in the code generator or optimiser of the tested Delphi version(s) (or in case range checking is enabled -- but in that case using pointers to work around range checking would be strange). And it most certainly looks a lot worse than

for i:=0 to high(sometypedynarray) do
  operate_on(sometypedynarray[i]);

It would also surprise me if any speed difference that may exist were significant.


Jonas
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to