ID Number: Q83082
6.00 6.00a 6.00ax 7.00 | 6.00 6.00a
MS-DOS | OS/2
Summary:
The following is a summary of many of the segments created by the C
run-time library for Microsoft C versions 6.0, 6.0a, 6.0ax, and C/C++
7.0. Some of these segments are reserved for internal use and their
implementation may be subject to change. The segments do vary slightly
between MS-DOS, Windows, and OS/2. More detailed information can be
obtained through the study of the C startup source provided with the
product.
Kevin J. Goodman also covers some of this information in his article
"A Comprehensive Examination of the Microsoft C Version 6.0 Startup
Code," which can be found in the January 1992 issue of the "Microsoft
Systems Journal" (Volume 7, number 1).
Name Class Description
==== ===== ===========
_TEXT CODE Contains C run time; code segment with /AS /AM
<Module>_TEXT CODE Code segment for each module with /AC /AL /AH
EMULATOR_TEXT CODE Code segment for x87 math emulator
----------------------------------------------------------------------
C_ETEXT ENDCODE Indicates the end of the CODE segments
----------------------------------------------------------------------
NULL BEGDATA Beginning of the DATA segments
----------------------------------------------------------------------
_DATA DATA Initialized global & static data, /GT not used
CDATA DATA Used to share data between float & standard libs
DBDATA DATA Used for debug data for QC
XIQC DATA Initialization/termination segment for QC
XIFB DATA Initialization/termination segment
XIF DATA "
XIFE DATA "
XIFCB DATA " (C/C++ 7.0)
XIFC DATA " (C/C++ 7.0)
XIFCE DATA " (C/C++ 7.0)
XIFM DATA " (C/C++ 7.0)
XIFU DATA " (C/C++ 7.0)
XIB DATA "
XI DATA "
XIE DATA "
XPB DATA "
XP DATA "
XPE DATA "
XCB DATA "
XC DATA "
XCE DATA "
XCFB DATA "
XCF DATA "
XCFE DATA "
----------------------------------------------------------------------
CONST CONST FP and integer constants; far data seg values
----------------------------------------------------------------------
_BSS BSS Uninitialized static data
XOB BSS Initialization/termination segment
XO BSS "
XOE BSS "
C_COMMON BSS Uninitialized global data with /AS, /AM
----------------------------------------------------------------------
HDR MSG Message text segment
MSG MSG "
PAD MSG "
EPAD MSG "
----------------------------------------------------------------------
STACK STACK Local data and parameters
----------------------------------------------------------------------
EMULATOR_DATA FAR_DATA Data segment for x87 math emulator
FAR_DATA FAR_DATA Initialized global & static, /Gt or _far used
----------------------------------------------------------------------
FAR_BSS FAR_BSS Uninitialized global data, /AC,/AL,/AH, _far
Uninitialized static data, _far used
----------------------------------------------------------------------
More Information:
Segment CDATA is used to share data between the floating-point portion
of the C run-time library and the standard portion of the library.
Support for floating-point math will be loaded only if your program
uses floating-point variables. This procedure is used to keep the size
of the executable file as small as possible.
The initialization and termination routines are grouped in threes as
follows:
XIB "B" for beginning segment
XI middle segment
XIE "E" for ending segment
These routines contain pointers to routines that the C run-time
library calls at either startup or termination. Contributions are made
to these segments at link time so that you only get routines that you
need. For example, if you use standard input/output (stdio) routines,
you will get a pointer to the "flushall" routine stored in an ending
segment. A label is put in a beginning segment (for example, "start"
in XIB) and one in the ending segment (for example, "end" in XIE). At
startup/termination, the code walks the table from "start" to "end"
and calls any routine whose pointer is stored in the middle segment
(that is, XI).
Contributions to the message text segments are also made at link time.
Therefore, you get only the message text that your program might need.
One example of the text contained here is the C run-time fatal error
messages (R6XXX).
The C run-time library also creates the default data segment, DGROUP,
BBwhich is composed of the above segments with class BEGDATA, DATA,
CONST, MSG, BSS, and STACK. Segments that did not receive
contributions will be zero length and won't take up any space in the
executable file. The remainder of the 64K segment is the near heap and
is used for dynamic allocation with _nmalloc and _ncalloc.
Additional reference words: 6.00 6.00a 6.00ax 7.00