Methods to Optimize Code Size

This section provides some guidance on how to achieve smaller object and smaller executable size when using the optimizing features of Intel compilers.

To begin, there are two compiler options that are designed to prioritize code size over performance:

Favors size over speed

Linux* and macOS*: -Os

Windows*: /Os

This option enables optimizations that do not increase code size; it produces smaller code size than option O2.

Option Os disables some optimizations that may increase code size for a small speed benefit.

Minimizes code size

Linux* and macOS*: -O1

Windows*: /O1

Compared to option Os, option O1 disables even more optimizations that are generally known to increase code size. Specifying option O1 implies option Os.

As an intermediate step in reducing code size, you can replace option O3 with option O2 before specifying option O1.

Option O1 may improve performance for applications with very large code size, many branches, and execution time not dominated by code within loops.

For more information about the above options, see their full descriptions in the Compiler Reference.

The rest of this section briefly discusses methods that may help you further improve code size even when compared to the default behaviors of options Os and O1.

The following table summarizes the topics in this section.

Most Common Methods to Reduce Code Size:

 

Disable or Decrease the Amount of Inlining

 

Strip Symbols from Your Binaries

 

Dynamically Link Intel-Provided Libraries

 

Exclude Unused Code and Data from the Executable

 

Disable Recognition and Expansion of Intrinsic Functions

 

Optimize Exception Handling Data on Linux and macOS* Systems

Methods to Use Only When Code Size is Very Important:

 

Disable Passing Arguments in Registers Instead of On the Stack

 

Disable Loop Unrolling

 

Disable Automatic Vectorization

Methods to Use Under Special Circumstances:

 

Avoid References to Compiler-Specific Libraries

 

Avoid Unnecessary 16-Byte Alignment

The following are important considerations:

See Also