[Back to RECORDS SWAG index] [Back to Main SWAG index] [Original]

    {
    >Okay, I've got the need to load about 3000 Records, at 73 Bytes a piece,
    >into active memory.  It'd be preferred to have it as an Array of
    >Records, which is what I'm using now (only at 1000 Records though).

    >When I do this I get Structure too Large.  Is there any way that I can
    >load all of these Records into memory, For sorting, editing, deleting
    >and adding new entries (which is easy With an Array).

    }
    Const
         MaxItems  = 3000 ;

    Type TItem =
         Record
              { 73 Bytes Record }
              Dum  : Array[1..73] of Byte ;
         end ;
         PItem = ^TItem ;

         TItemArray = Array[1..MaxItems] of PItem ;

    Var  i    : Integer ;
         Arr  : TItemArray ;

    begin
         For i:=1 to MaxItems Do New(Arr[i]) ;

         { Now, can use all those items in memory }

         For i:=1 to MaxItems Do Dispose(Arr[i]) ;
    end.

    {

    note that the set of data will occupy :

    3000*4 Bytes in DS            12000 Bytes
    3000*80 Bytes in the heap    240000 Bytes
                                 ------
                                 252000 Bytes of memory...

    The '80' in the second line is due to the fact that TP 6's heap manager
    allocates heap space by multiples of 8 Bytes, thus 73 Bytes result in
    80 Bytes allocs. Reducing it to 72 Bytes would save 8*3000=24000 Bytes.

    Anyway, this is not Real safe Programming, and you should prefer using a
    File, unleast you are Really sure that :
    - you won't have more than 3000 Records,
    - any machine your Program will run onto has enough memory.
    }

[Back to RECORDS SWAG index] [Back to Main SWAG index] [Original]