The information in this article applies to:
SUMMARY
The tool helper library (TOOLHELP.DLL) contains application programming
interface (API) functions that provide information about the task header of
a Windows-based application's default data segment (DGROUP). A Windows-
based application can use this information to determine the maximum stack
size, the optimum stack size for the application, and whether the stack is
going to overflow.
MORE INFORMATIONA Windows-based application's DGROUP consists of several parts: the task header, initialized and uninitialized static data area, stack, local heap, and an atom table. The following picture extracted from Chapter 18 of the "Windows 3.1 Power Programming Techniques" by Peter Norton and Paul Yao, shows the organization of the DGROUP:
The task header is a data structure stored in the first 16 bytes of
the DGROUP and contains information about the stack, the local heap,
and the atom table. Windows stores three variables (pStackTop,
pStackBottom, and pStackMin) that point to various places in the stack
as shown in the picture above. pStackTop and pStackBottom point to the
top and bottom of the stack, and these two values stay constant once
initialized. pStackMin changes during run time to indicate how much of
the stack is actually used. Given this information, the following can
be determined:
Maximum Stack size = pStackBottom - pStackTopThe maximum stack size is either the size specified in the DEF file with the STACKSIZE statement or 5K (Windows provides a minimum of 5K stack). Because Windows updates the pStackMin at run time, monitoring the dynamic size gives an indication as to how much stack space an application really needs. This value may also be used to check for stack overflows during run time, although using stack probes is definitely a better method for checking stack overflows. Some advanced debuggers such as WDEB386 (included in the Microsoft Windows SDK) and SoftIce/W (from NuMega Technologies, Inc.) allow breakpoints to be set on particular memory locations; for example, if a breakpoint is set at the bottom of the stack, the debugger will break just before a stack overflow. Windows-based applications can obtain the values of pStackTop, pStackBottom, and pStackMin by calling the tool help library API functions, which return a TASKENTRY structure. An application should call GetCurrentTask() to get its task handle and then call TaskFindHandle(), TaskFirst() or TaskNext() with the task handle as a parameter. The TASKENTRY structure contains three members wStackTop, wStackBottom, and wStackMinimum, which correspond to the three pointers pStackTop, pStackBottom, and pStackMin, respectively. CodeView for Windows (CVW) debugger can also be used to look at the task header of an application's DGROUP. For example, using CVW one can periodically check the first 16 bytes in the DGROUP using the command: D DS:0CVW will then display the following information: DS:0006 PLOCALHEAPThe three values pStackTop, pStackMin, and pStackBot at locations DS:000A, DS:000C, and DS:000E, respectively, can be used to determine information about the application's stack as illustrated above. Additional query words: no32bit 3.10
Keywords : kb16bitonly |
Last Reviewed: November 4, 1999 © 2000 Microsoft Corporation. All rights reserved. Terms of Use. |