{ Here is some code I use to find out how many stack space is used after a run. I guess it won't work in protected mode. Be aware it isn't byte-resolution ! I'd like to hear about enhancements. } unit Stack; interface procedure InitStack; procedure TestStack; implementation (* Routinen zum Pruefen des Stackbedarfs Wilfried F?rber, Isar Software GmbH Ringeisstr. 2a, 8000 Muenchen 2 August 1991 Routinen zum Pruefen, wieviel Stack wirklich benoetigt wird. Willfried F?rber, Isar Software GmbH, August 1991 Port von C nach Pascal: Jacques NOMSSI NZALI, email: nomssi@physikus.physik.tu-chemnitz.de *) Var STKHQQ : word; const stacktext : packed array[1..4] of char = 'STAC'; MAXSTACK = (1024 div 4)*64; function atopsp : Word; assembler; asm mov ax, sp end; procedure InitStack; var AktStack, Anzahl : Word; begin STKHQQ := StackLimit; asm mov AktStack, bp end; Anzahl := (AktStack - STKHQQ) div 4; asm mov cx, [Anzahl] mov di, [STKHQQ] mov ax, ss mov es, ax mov ax, Offset StackText @L1: mov si, ax movsw movsw loop @L1 end; end; function StackSize : Word; begin StackSize := - STKHQQ + atopsp; end; function StackUsed : Word; var StackFrei, StackMax : Word; Begin StackMax := StackSize; asm mov cx, MAXSTACK mov di, [STKHQQ] mov ax, ss mov es, ax mov ax, Offset Stacktext @L1: mov si, ax cmpsw jnz @L2 cmpsw loope @L1 @L2: sub cx, MAXSTACK not cx mov [StackFrei], cx end; StackFrei := StackFrei*4; StackUsed := StackMax - StackFrei; end; procedure TestStack; var StackVerb, _MaxStack : Word; begin _MaxStack := StackSize; StackVerb := StackUsed; WriteLn('STACK-VERBRAUCHSTEST ---------------------- '); WriteLn('Programmstack :', _MaxStack); WriteLn('Es wurden ca. ',StackVerb,' Bytes benoetigt.'); WriteLn('Stack-Reserve :',MaxStack-StackVerb,' Bytes.'); ReadLn; end; begin InitStack; end.