/ORDER (Colocar las funciones en orden)
Especifique el orden de vínculo para las funciones empaquetadas por separado (COMDAT).
Sintaxis
/ORDER:@nombredelarchivo
Parámetros
filename
Un archivo de texto que especifica el orden de vínculo para las funciones COMDAT.
Comentarios
La opción del compilador /ORDER permite optimizar el comportamiento de paginación del programa mediante la agrupación de una función junto con las funciones a las que llama. También puede agrupar funciones llamadas con frecuencia. Estas técnicas, conocidas como ajuste del intercambio u optimización de la paginación, aumentan las probabilidades de que una función llamada esté en memoria cuando haga falta, y no tenga que paginarse desde el disco.
Al compilar el código fuente en un archivo objeto, puede indicar al compilador que coloque cada función en su propia sección, denominada COMDAT, mediante la opción del compilador /Gy (Habilitar vinculación de nivel de función). La opción del enlazador /ORDER indica al enlazador que coloque las funciones COMDAT en la imagen ejecutable y en el orden que quiera.
Para especificar el orden de las COMDAT, cree un archivo de respuesta, un archivo de texto que enumere cada COMDAT por nombre, una por línea, en el orden en que desea que el enlazador las coloque. Pase el nombre de este archivo como parámetro del nombre del archivo de la opción /ORDER. Para las funciones de C++, el nombre de una COMDAT es la forma representativa del nombre de la función. Use el nombre no representativo para las funciones de C, main
, y para las funciones de C++ declaradas como extern "C"
. Los nombres de funciones y los nombres representativos distinguen mayúsculas de minúsculas. Para más información sobre los nombres representativos, consulte Nombres representativos.
Para buscar los nombres representativos de las COMDAT, use la opción /SYMBOLS de la herramienta DUMPBIN en el archivo objeto. El enlazador antepone automáticamente un carácter de subrayado (_) a los nombres de funciones en el archivo de respuesta, a menos que el nombre empiece por un signo de interrogación (?) o de arroba (@). Por ejemplo, si un archivo de origen, ejemplo.cpp, contiene funciones int cpp_func(int)
, extern "C" int c_func(int)
y int main(void)
, el comando DUMPBIN /SYMBOLS example.obj
enumera estos nombres representativos:
...
088 00000000 SECT1A notype () External | ?cpp_func@@YAHH@Z (int __cdecl cpp_func(int))
089 00000000 SECT22 notype () External | _c_func
08A 00000000 SECT24 notype () External | _main
...
En este caso, especifique los nombres como ?cpp_func@@YAHH@Z
, c_func
y main
en el archivo de respuesta.
Si aparece más de una opción /ORDER en las opciones del enlazador, la última especificada es la que surte efecto.
La opción /ORDER deshabilita la vinculación incremental. Es posible que vea la advertencia LNK4075 del enlazador cuando especifique esta opción, si la vinculación incremental está habilitada o si ha especificado la opción del compilador /ZI (PDB incremental). Para silenciar esta advertencia, puede usar la opción del enlazador /INCREMENTAL:NO para desactivar la vinculación incremental, y usar la opción del compilador /Zi (Generar PDB) para generar un PDB sin vinculación incremental.
Nota:
LINK no puede ordenar funciones estáticas porque los nombres de función estática no son nombres de símbolos públicos. Cuando se especifica /ORDER, se genera la advertencia LNK4037 del enlazador para cada símbolo en el archivo de respuesta del orden, que es estático o no se encuentra.
Para establecer esta opción del vinculador en el entorno de desarrollo de Visual Studio
Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para más información, vea Establecimiento del compilador de C++ y de propiedades de compilación en Visual Studio.
Seleccione la página de propiedades Propiedades de configuración>Enlazador>Optimización.
Modifique la propiedad Function Order para que contenga el nombre del archivo de respuesta.
Para establecer esta opción del vinculador mediante programación
- Vea FunctionOrder.