[fpc-pascal] Array clearing

Mattias Gaertner nc-gaertnma at netcologne.de
Thu Apr 13 14:08:59 CEST 2017


On Thu, 13 Apr 2017 13:17:37 +0200
MARCOU Gilles <g.marcou at unistra.fr> wrote:

> Regarding this code:
> 
> > SetLength(Array,Length(Array)+1);
> > Array[High(Array)] := …  
> 
> as I understood from (http://wiki.freepascal.org/Dynamic_array <http://wiki.freepascal.org/Dynamic_array>), SetLength will create a copy of the array and free the memory of the shorter array. In this case, a lot of memory operations and copy operations are performed thus degrading the performances of the code.

Correct.

> Then it would be unwise to use such strategy: better allocate the size
> of the array correctly at the beginning of the run, or resize the
> array by block, to decrease the frequency of such operation:

The usual solution is to grow exponentially:

SetLength(Array,Length(Array)+Max(4,length(Array) div 4))

Mattias



More information about the fpc-pascal mailing list