/ORDER (Put Functions in Order)
The latest version of this topic can be found at -ORDER (Put Functions in Order).
ORDER:@filename
## Parameters
*filename*
A text file specifying the linking order for COMDAT functions.
## Remarks
The /ORDER option tells LINK to optimize your program by placing certain COMDATs into the image in a predetermined order. LINK places the functions in the specified order within each section in the image.
Specify the order in *filename*, which is a text file (response file) that lists the COMDATs in the order you want to link them. Each line in *filename* contains the name of one COMDAT. An object contains COMDATs if it has been compiled with the /Gy option. Function names are case sensitive.
LINK uses decorated forms of identifiers. The compiler decorates an identifier when it creates the .obj file. Use the [DUMPBIN](../Topic/DUMPBIN%20Reference.md) tool to get the decorated form of an identifier when you need to specify it to the linker. For more information on decorated names, see [Decorated Names](../Topic/Decorated%20Names.md).
If more than one /ORDER specification is used, the last one specified takes effect.
Ordering allows you to optimize your program's paging behavior through swap tuning by grouping a function with the functions it calls. You can also group frequently called functions together. These techniques increase the probability that a called function is in memory when it is needed and will not have to be paged from disk.
The linker will prepend an underscore (_) to every decorated name in *filename* unless the name starts with a question mark (?) or at sign (@). For example, if an object file contains `extern "C" int func(int)` and `int main(void)`, DUMPBIN [/SYMBOLS](../Topic/-SYMBOLS.md) will list these decorated names:
009 00000000 SECT3 notype () External | _func
00A 00000008 SECT3 notype () External | _main
However, the name specified in the order file should be `func` and `main`.
The /ORDER option disables incremental linking.
> [!NOTE]
> LINK cannot order static functions because static function names are not public symbol names. When /ORDER is specified, linker warning LNK4037 is generated for each symbol, in the order file, that is either static or not found.
### To set this linker option in the Visual Studio development environment
1. Open the project's **Property Pages** dialog box. For details, see [Setting Visual C++ Project Properties](../Topic/Working%20with%20Project%20Properties.md).
2. Click the **Linker** folder.
3. Click the **Optimization** property page.
4. Modify the **Function Order** property.
### To set this linker option programmatically
- See [FunctionOrder](assetId:///P:Microsoft.VisualStudio.VCProjectEngine.VCLinkerTool.FunctionOrder?qualifyHint=False&autoUpgrade=True).
## See Also
[Setting Linker Options](../Topic/Setting%20Linker%20Options.md)
[Linker Options](../Topic/Linker%20Options.md)