[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