[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]