ID Number: Q42259
2.03 2.10 3.00
WINDOWS
Summary:
The Microsoft Linker /FARCALLTRANSLATION option switch (abbreviated
/F) can reduce the size of an application developed for the Windows
environment and can increase its execution speed.
When Windows loads an application, it creates a thunk (a relocation
code fragment) for each far call. However, when an application makes a
far call to a function in the same segment, no thunk is necessary. The
/F switch instructs the Microsoft Linker to replace each far call to
the same segment with the instructions NOP, PUSH CS, and CALL NEAR.
The resulting near calls do not require a thunk, which saves memory
space. Execution speed improves because the translated call does not
execute the thunk code.
If the routine is called only from the same code segment, the
application can save additional space and time by declaring the
function as a near function. Doing so eliminates the NOP and PUSH CS
instructions.
The "Microsoft CodeView and Utilities Software Development Tools for
the MS-DOS Operating System" manual for Microsoft C versions 5.0 and
5.1 includes the following caveat regarding the /F option switch in
Section 12.2.19 on page 277:
Note
There is a small risk involved with the /F option; the linker may
mistakenly translate a byte in a code segment that happens to have
the far-call opcode (9A hexadecimal). if a program linked with /F
inexplicably fails, they you may want to try linking with this
option off. However, object modules produced by Microsoft high-
level languages should be safe from this problem, because
relatively little intermediate data is stored in code segments.
An application developed for Windows should not use the /PAC linker
option switch because it conflicts with the SEGMENTS statements in the
application's module definition DEF file.
Additional reference words: 2.03 2.10 3.00 /PAC /PACKCODE /NOP
/NOPACKCODE /F /FARCALLTRANSLATION /NOF /NOFARCALLTRANSLATION