[fpc-devel] static vs dynamic arrays
Michael Van Canneyt
michael at freepascal.org
Tue Apr 4 15:01:01 CEST 2006
On Tue, 4 Apr 2006, ???? ??????????? wrote:
>> If you really want to speed up both cases you need to use pointers and
>> increase the pointer value in each iteration. This saves the indexing in
>> every iteration.
> Thank you, that was informative. Here are the results (one program at the end for completeness):
> ap^:=app^; inc(ap); dec(bp);
> 4780 4845
> ap^:=1; inc(ap);
> 3703 3703
> ap^:=a xor ap^; inc(ap);
> 3813 4203
> Now the question rises again in the original form (not very correct, see previous messages):
> WHY DYNAMICS ARE SLOWER?
Because of the copy-on-write mechanism. The reference count must be
checked each time you do a write. This is normal. It's the same in
Delphi, and a good reason for avoiding dynamic arrays.
You can use pointer arithmetics in FPC, it works as a dynamic array, but
without the overhead.
MyArray : PInteger;
// Equivalent to setlength(MyArray,ArraySize);
For I:=0 to ArraySize-1 do
// Equivalent to setlength(MyArray,0);
More information about the fpc-devel