[fpc-pascal] about dynamic array

José Mejuto joshyfun at gmail.com
Sat May 8 14:46:15 CEST 2010


Hello FPC-Pascal,

Saturday, May 8, 2010, 1:26:09 PM, you wrote:

>> But it is faster than inserting elements in a dynamic array (unless
>> reference counted ones) because it usually moves less amount of data
>> (4/8 bytes per element).
VH> Implementing a dynamic array via a list implementation which
VH> is based on a dynamic array. Sure, that's faster.

Ok, let me known which operation is faster:

type ItemOfArray=record
  TheData: array [0..4095] of BYTE;
end;

1)
 TheArray: array of ItemArray;
 AnyItem: ItemOfArray;
 [...]
 for j:=0 to 1000 do begin
   SetLength(TheArray,j+1);
   TheArray[j]:=AnyItem;
 end;
 [...]
 Now here add the code to remove element zero from the array and move
 down the upper elements.

2)
  TheList: TList;
  AnyItem: ItemOfArray;
  p: Pointer;
  [...]
  for j:=0 to 1000 do begin
    GetMem(p,Sizeof(AnyItem));
    TheList.Add(p);
  end;
  [...]
  p:=TheList[0];
  FreeMem(p);
  TheList.Remove(0);

----------------------
  Remember that the user wants to have an array which could be
  extended and that allow fast insertion and remove. Of course it
  would be faster using an array of pointers, but TList will force the
  user to use an array of pointer, while a dynamic array will not as
  it can be used with the record type directly.

  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. Remember
  the begins, "move (dynarray,...,...)" do not work "as expected".

  If you think that have a better proposal, write it...

  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.
  

-- 
Best regards,
 José




More information about the fpc-pascal mailing list