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>.