Developer Guide and Reference

Contents

Using Function Order Lists, Function Grouping, Function Ordering, and Data Ordering Optimizations

Instead of doing a full multi-file interprocedural build of your application by using the compiler option
[Q]ipo
, you can obtain some of the benefits by having the compiler and linker work together to make global decisions about where to place the
functions
and data in your application. These optimizations are not supported on
macOS*
systems.
The following table lists each optimization, the type of
functions
or global data it applies to, and the operating systems and architectures that it is supported on.
Optimization
Type of
Function
or Data
Supported OS and Architectures
Function Order Lists:
Specifies the order in which the linker should link the non-static routines (
functions
) of your program. This optimization can improve application performance by improving code locality and reduce paging. Also see Comparison of Function Order Lists and IPO Code Layout.
extern
functions
procedures and library
functions
only (not static
functions
).
Windows: all Intel architectures
Linux: not supported
Function Grouping
: Specifies that the linker should place the extern and static routines (
functions
) of your program into hot or cold program sections. This optimization can improve application performance by improving code locality and reduce paging.
This option will cause functions to be placed into the linker sections named ".text.hot" and ".text.unlikely." If you are using a custom linker script, you will need to specify memory placement for these sections.