Huge Addressing under OS/2 (32206)



The information in this article applies to:

  • Microsoft FORTRAN Compiler for MS-DOS 4.1
  • Microsoft FORTRAN Compiler for MS-DOS 5.0
  • Microsoft FORTRAN Compiler for MS-DOS 5.1
  • Microsoft FORTRAN compiler for OS/2 4.1
  • Microsoft FORTRAN compiler for OS/2 5.0
  • Microsoft FORTRAN compiler for OS/2 5.1

This article was previously published under Q32206

SUMMARY

When a huge array is allocated space, OS/2 allocates segments from the Segment Selector Table in increments of n+0i, n+1i, n+2i, etc., where "n" is the starting selector and "i" is the incremental value. The value of "i" must be determined at load time for different versions of the OS/2 and for different configurations of the similar versions. The way that huge addressing is performed under OS/2 is identical to the way in which MS-DOS accesses huge addresses. However, under MS-DOS, "i" is always 4,096.

Below is an example of how to obtain the value of "i" in a FORTRAN program. The value of "i" is 2 raised to the power returned by DosGetHugeShift. This information is discussed in detail in the Microsoft Press book "Inside OS/2" by Gordon Letwin, Section 9.2.2.

MORE INFORMATION

The following example shows how to obtain the value of "i" in a FORTRAN program:
       INTERFACE TO INTEGER*2 FUNCTION DosGetHugeShift
      + [ALIAS: 'DOSGETHUGESHIFT'] (SHIFT)
       INTEGER*2 SHIFT
       END
       INTEGER*2 SHIFT,DosGetHugeShift
       INTEGER*2 I
       I = DosGetHugeShift(SHIFT)
       PRINT *,'DosGetHugeShift = ',SHIFT
       PRINT *,'i = ',(2**SHIFT)
       STOP
       END
				

Modification Type:MajorLast Reviewed:12/1/2003
Keywords:KB32206