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

{
> I have a rather irritating problem with TP:
>
> When I set my memory requirements ($M compile-time directive) to
> 16384, 0, 655360 [stack, heapmin and heapmax, respectively] I can't
> shell to DOS as there's no heap free for it [and you can't change the
> mem requirements on the fly] to do so, however, when my information
> screen displays itself, it correctly shows MemAvail. [a longint
> containing the amount of RAM free]  As I decrease heapmax, the MemAvail
> output also decreases, which is not good, especially since shelling and
> running MEM /C directly contradicts it.  If somebody can make sense of
> this mess, can you fix my problem?  Thanks a bunch...

Have you checked out the Memory Unit that comes with TP 7 (maybe 6). It has
several procs that may help you out, notable  SetMemTop() which allows you
to decrease your heap on the fly. I haven't actually played with this
commands yet, but it may be worth your while to check'em out.}

{$A-,B-,D+,E-,F-,G+,I+,L+,N-,O-,P-,Q-,R+,S+,T-,V+,X+,Y+}
{$M 16384,0,655360}

{$Tested with TP 7}

Program TestMem;

Uses Memory,Dos;

Type PStruct = ^TStruct;
     TStruct = Record
       Name: String;
       Age : Byte;
     end;

Var
   PS: PStruct;
begin
  New(PS);
  SetMemTop(HeapPtr);   {Without this, the shell fails}
  SwapVectors;
  Exec(GetEnv('Comspec'),'');
  SwapVectors;
  SetMemTop(HeapEnd);   {Restore your heap}
  Dispose(PS);
end.

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