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

{
Q:  How do I reduce the amount of memory taken from the data
segment?  (or How do I allocate memory dynamically?)

A:
}
Let's say your data structure looks like this:

 type
   TMyStructure = record
     Name: String[40];
     Data: array[0..4095] of Integer;
   end;

That's too large to be allocated globally, so instead of 
declaring a global variable,

 var
   MyData: TMyStructure;

you declare a pointer type,

 type
   PMyStructure = ^TMyStructure;

and a variable of that type,

 var
   MyDataPtr: PMyStructure;

Such a pointer consumes only four bytes of the data segment.

Before you can use the data structure, you have to allocate it 
on the heap:

 New(MyDataPtr);

and now you can access it just like you would global data. The 
only difference is that you have to use the caret operator to 
dereference the pointer:

 MyDataPtr^.Name := 'Lloyd Linklater';
 MyDataPtr^.Data[0] := 12345;

Finally, after you're done using the memory, you deallocate it:

 Dispose(MyDataPtr);

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