> 1) > TheArray: array of ItemArray; > AnyItem: ItemOfArray; > [...] > for j:=0 to 1000 do begin > SetLength(TheArray,j+1); > TheArray[j]:=AnyItem; > end; > [...]
About 1000 GetMem operations (and 1000 assignments which aren't there in the code below, so I won't count them). > Now here add the code to remove element zero from the array and move > down the upper elements. One GetMem, one FreeMem and a (hopefully) fast memory move. > 2) > TheList: TList; > AnyItem: ItemOfArray; > p: Pointer; > [...] > for j:=0 to 1000 do begin > GetMem(p,Sizeof(AnyItem)); > TheList.Add(p); > end; About 1000 GetMems, and potentially another 1000 for extending the list (yes, the internals are more optimized, yet there /will/ be additional calls to GetMem). > [...] > p:=TheList[0]; > FreeMem(p); > TheList.Remove(0); One explicit FreeMem, one potential FreeMem for resizing the list and a (hopefully) fast memory move. > IMHO the discussion was about how help the user to reach an > objetive, not how to reach the objetive in the most efficient way > but forcing the user to learn the inners of dynamic array. And the statement was that using TList would be faster. > I can have some basic skills at some points in the pascal world, but > I'm not stupid at such level to not known that a dynamic array (or > similar) is being used in the background of TFPList. So, apart from a possibly more optimized implementation (like not changing the allocated memory size on each single insertion/deletion) how do you come up with the idea that adding another layer would make it faster? Vinzent. -- GRATIS für alle GMX-Mitglieder: Die maxdome Movie-FLAT! Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome01 _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal