Microsoft KB Archive/60079

= Using the NEAR Attribute with FORTRAN COMMON Blocks =

Article ID: 60079

Article Last Modified on 12/1/2003

-

APPLIES TO


 * Microsoft FORTRAN Compiler 4.0
 * Microsoft FORTRAN Compiler 4.01
 * Microsoft FORTRAN Compiler 4.1
 * Microsoft FORTRAN Compiler 5.0
 * Microsoft FORTRAN Compiler 5.1
 * Microsoft FORTRAN Compiler 4.1
 * Microsoft FORTRAN Compiler 5.0
 * Microsoft FORTRAN Compiler 5.1

-



This article was previously published under Q60079



SUMMARY
Page 34 of the Microsoft FORTRAN &quot;Advanced Topics&quot; manual includes a discussion of using the NEAR attribute with a COMMON block. By default, in Microsoft FORTRAN each COMMON block is placed into its own data segment to save space in the default data segment (DGROUP). The drawback to this method is that a far pointer is required to access data from a COMMON block which makes the compiled code larger and slower. To address this problem, use the NEAR attribute with small, frequently accessed COMMON blocks. To use this technique, sufficient space must be available in the default data segment.

When an application uses the NEAR attribute with a COMMON block, the data in each COMMON block may appear to remain in its own segment, rather than in the DGROUP segment when you use the /Fs compiler option switch to create a source listing. This may be confusing when space is obviously available in the default data segment for information in the COMMON block. To verify that a NEAR COMMON block is concatenated to the default data segment, view an object listing or a map listing. (To create an object listing, specify the /Fl compiler option switch; to generate a map listing, specify the /Fm compiler option switch.)



MORE INFORMATION
The following code example demonstrates using the NEAR attribute to place data in COMMON blocks into the default data segment.

Sample Code
C Compile options needed: None

INTEGER*4 A, B, C     COMMON    /C1 [NEAR]/ A, C      COMMON    /C2 [NEAR]/ B      END The source listing describes each COMMON block as follows:   Global Symbols Name                     Class   Type              Size   Offset C1. . . . . . . . . . . . common ***                  8    0000 C2. . . . . . . . . . . . common ***                  4    0000 main. . . . . . . . . . . FSUBRT ***                ***    0000 The map file indicates that each COMMON block is included in DGROUP. In the listing below, note that the segment address of each COMMON block is 005Dh, the DGROUP segment address:  Start Stop   Length Name                   Class 00710H 00713H 00004H C2$A                  $C2 00720H 00727H 00008H C1$A                  $C1

Origin  Group 005D:0  DGROUP

Address        Publics by Name 005D:0130      C1 005D:0120       C2

Address        Publics by Value 005D:0120      C2 005D:0130       C1 The object listing includes a description of the manner in which the compiler grouped all segments, including the NEAR COMMON blocks, into DGROUP. That portion of the object listing is as follows: NAME   common

C2$A SEGMENT PARA COMMON '$C2' C2$A ENDS C1$A SEGMENT PARA COMMON '$C1' C1$A ENDS DGROUP   GROUP     CONST, _BSS, _DATA, C2$A, C1$A ASSUME CS: COMMON_TEXT, DS: DGROUP, SS: DGROUP, ES: DGROUP

Additional query words: kbinf 4.00 nofps 4.01 4.10 5.00 5.10

Keywords: KB60079

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.