Memory
Display Memory statistics
──────────────────────────────────────────────────────────────────────────────

This option produces a window containing information about MrDebug. This can
include operating system information, memory information and most
importantly information about DGROUP.

The memory/information window is broken down into two sections: the left
handside detailing the memory configuration, including DPMI, VCPI and EMS;
the right hand side shows a visual representation of the 64K area of memory
known as DGROUP.


About DGROUP.

DGROUP is a 64K chunk of memory that, for a Clipper program, can be broken
down into five distinct sections, each serving a specific purpose, DGROUP
can be easily described as a 64K block of memory that is used by Clipper as
a common area of memory that Cliper and third party products can rely on to
find various items of information. There are five main parts to DGROUP:


1. The MemVar table (Dynamic)

This is used to store Clipper STATIC variables and ITEMs (declared
through the ITEM API) with their contents if the contents and
variable/ITEM definition can be held within 14 bytes, otherwise the
variable/ITEM definition is held along with a pointer to a Virtual Memory
segment where the variable/ITEM contents are held.

2. DS Available (Dynamic)

This is the amount of free memory available within the DGROUP. This
amount can be seen from //INFO as DS AVAIL or from the Memory/Info
window. This will be reduced during the execution of the program as the
Eval Stack and the Memvar table may both 'grow' into this area.

3. Eval Stack (Dynamic)

This is where Clipper LOCAL variables are held (if the variable
definition and contents take up 14 bytes or less), otherwise a pointer is
stored to a Virtual memory segment that contains the variable contents.

4. CPU Stack (Fixed)

The CPU stack is used to store the function return addresses each time a
new function is called, as well as local 'C' variables.

The size of the CPU stack is set when you link your program. It depends
upon the linker that you are using and linker specific commands that you
have in the link script that might increase or reduce the stack

5. Fixed C and ASM Data (Fixed)

This area is used by other third party libraries and other languages that
do not use their own data segments and use the default data segment
(otherwise known to us Clipperites as DGROUP) to store fixed pieces of
text and global variables used by other languages

For example, inside Clipper, the un-recoverable error messages are stored
within this section of the default data segment (DGROUP).


The following screen shot represents an example of the Memory/Info window:

█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ Memory Status/Program Info ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
█ █
┌─────────────────────────────────────┐ ┌─ Visual DGROUP Usage ────────┐
System MemVar Table 907 bytes
│ Operating System: OS/2 DOS (22 ITEMs)
│ OS/2 Version: 2.11
19796 bytes
│ Processor Type: 80486 (1414 SLOTs)
│ Processor Mode: Protected
3264 bytes
│ Video Mode: 3 DS Available (233 VARs)

│ DPMI Version: 0.95 7168 bytes
│ Implementation: 32-Bit
34400 bytes
│ VCPI Version: Not Detected

│ EMM Version: 4.0
│ Total EMS Memory: 2432K
│ Free EMS Memory: 1984K
│ Used: 448K
│ Page Frame: CC00

Application Eval Stack
│ Linker: Blinker

Memory
String Space CPU Stack
Now: 17641K
Startup: 17641K
│ Percentage: 100%

Largest Block
Now: 17641K
Startup: 17641K
│ Percentage: 100%

RUN Space
Now: 536K
Startup: 536K
│ Percentage: 100%

Virtual Memory
Now: 17152K
Startup: 17152K Fixed
Percentage: 100% C & ASM
Data
EMS Memory
│ Not Used

DS Available
Program Start: 21K, 22495 bytes
Post Startup: 19K, 19796 bytes
Now: 19K, 19796 bytes

Stack
│ Max Proc. Depth: 18
│ Min. Stack Left: 6910

Versions
│ MrDebug Version: 1.10 (b76)
│ Clipper Version: 5.2d

Misc.
│ Parameters: None
└─────────────────────────────────────┛ └──────────────────────────────┛
█ █
█▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█


Please note that this does not all fit onto one screen. You may have to use
the ↑ and ↓ keys to see the different parts of the left hand view.

You may note that there are circles next to some of the memory legends,
traffic lights. These denote "acceptable limits".

A green traffic light would indicate that everything is normal and that you
should be okay with regards to memory and therfore your program should run.

An amber traffic light would denote that memory is starting to run out and
that you may expect an error of some description soon.

A red light means that you are about to run short of memory and the program
is about to crash, has done or will do.

Users of Blinker may like to note that addiotnal information can be obtained
from this screen by including the following functions within their code:


BLIMGRSTS (Blinker 3.00 and higher)
BLIVERNUM
BLISERNUM


The hot-key combination for this item is <Shift><Alt><M>.