/ORDER (colocar funções na ordem)
Especificar a ordem de vinculação para funções empacotadas separadamente (COMDAT).
Sintaxe
/ORDER:@filename
Parâmetros
filename
Um arquivo de texto que especifica a ordem de vinculação para funções COMDAT.
Comentários
A opção do compilador /ORDER permite otimizar o comportamento de paginação do programa agrupando uma função com as funções que ela chama. Você também pode agrupar funções chamadas com frequência. Essas técnicas, conhecidas como de ajuste de troca ou otimização de paginação, aumentam a probabilidade de que uma função chamada esteja na memória quando for necessária e não precise ser paginada do disco.
Ao compilar seu código-fonte em um arquivo-objeto, você pode informar ao compilador para colocar cada função em sua própria seção, chamada COMDAT, usando a opção do compilador /Gy (Habilitar vinculação no nível da função). A opção do vinculador /ORDER informa ao vinculador para colocar COMDATs na imagem executável na ordem que você especificar.
Para especificar a ordem de COMDAT, crie um arquivo de resposta, um arquivo de texto que lista cada COMDAT por nome, um por linha, na ordem em que você deseja que eles sejam colocados pelo vinculador. Passe o nome desse arquivo como o parâmetro filename da opção /ORDER. Para funções do C++, o nome de um COMDAT é a forma decorada do nome da função. Use o nome não decorado para funções do C, main
, e para funções C++ declaradas como extern "C"
. Nomes de função e nomes decorados diferenciam maiúsculas de minúsculas. Para obter mais informações sobre nomes decorados, confira Nomes Decorados.
Para localizar os nomes decorados de seus COMDATs, use a opção /SYMBOLS da ferramenta DUMPBIN no arquivo de objeto. O vinculador coloca automaticamente um sublinhado (_) antes de nomes de função no arquivo de resposta, a menos que o nome comece com um ponto de interrogação (?) ou no sinal (@). Por exemplo, se um arquivo de origem, example.cpp, contiver funções int cpp_func(int)
, extern "C" int c_func(int)
e int main(void)
, o comando DUMPBIN /SYMBOLS example.obj
listará estes nomes decorados:
...
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
...
Nesse caso, especifique os nomes como ?cpp_func@@YAHH@Z
, c_func
e main
em seu arquivo de resposta.
Se mais de uma opção /ORDER aparecer nas opções do vinculador, a última especificada entrará em vigor.
A opção /ORDER desativa a vinculação incremental. Você poderá ver o aviso do vinculador LNK4075 ao especificar essa opção se a vinculação incremental estiver habilitada ou se você tiver especificado a opção do compilador /ZI (PDB Incremental). Para silenciar esse aviso, use a opção do vinculador /INCREMENTAL:NO para desativar a vinculação incremental e usar a opção do compilador /Zi (Gerar PDB) para gerar um PDB sem vinculação incremental.
Observação
O LINK não consegue ordenar funções estáticas porque nomes de função estática não são nomes de símbolos públicos. Quando /ORDER é especificada, o aviso do vinculador LNK4037 é gerado para cada símbolo que seja estático ou que não seja encontrado no arquivo de resposta da ordem.
Para definir esta opção do vinculador no ambiente de desenvolvimento do Visual Studio
Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter detalhes, confira Definir as propriedades de build e do compilador do C++ no Visual Studio.
Selecione a página de propriedades Propriedades da Configuração>Vinculador>Otimização.
Modifique a propriedade Ordem da Função para conter o nome do seu arquivo de resposta.
Para definir esta opção do vinculador por meio de programação
- Consulte FunctionOrder.