O que é “vinculação incremental”?


105

Eu olhei o MSDN da Microsoft e toda a web, mas ainda não consegui ter uma boa idéia do que é.

Isso significa que o programa concluído carrega DLLs em momentos diferentes durante sua execução, em oposição a todos de uma vez na inicialização?

Estou totalmente errado? :)


1
Eu adicionei uma resposta para GNU ld, mas ela foi excluída, aqui está uma semelhante: stackoverflow.com/questions/29391965/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Ele foi excluído porque Copiar, Colar e Divergir são ruins - não importa o quão bom seja o conteúdo en.wikipedia.org/wiki/Don%27t_repeat_yourself
MarcH

Respostas:


122

A vinculação envolve o empacotamento de todos os arquivos .obj construídos a partir de seus arquivos de origem, bem como quaisquer arquivos .lib que você fizer referência, em sua saída (por exemplo, .exe ou .dll).

Sem vinculação incremental, isso deve ser feito do zero a cada vez.

A vinculação incremental vincula seu exe / dll de uma forma que torna mais fácil para o vinculador atualizar o exe / dll existente quando você faz uma pequena alteração e recompila.

Portanto, a vinculação incremental apenas torna mais rápido compilar e vincular seu projeto.

O único efeito de tempo de execução que pode ter é que pode tornar seu exe / dll ligeiramente maior e mais lento, conforme descrito aqui:

http://msdn.microsoft.com/en-us/library/4khtbfyf.aspx

Edit: Conforme mencionado por Logan, o link incremental também é incompatível com a geração de código de tempo de link - perdendo, portanto, uma possível otimização de desempenho.

Você pode querer usar link incremental para compilações de depuração para acelerar o desenvolvimento, mas desative-o para compilações de lançamento para melhorar o desempenho do tempo de execução.

Atrasar DLLs carregadas pode ser o que você está pensando:

http://msdn.microsoft.com/en-us/library/151kt790.aspx


Ah, pensei que os linkers sempre faziam isso de qualquer maneira! Portanto, desligar incremental linkingfará com que o vinculador vincule tudo do zero a cada vez?
Russel

6
"Na prática, provavelmente não vale a pena se preocupar com o efeito disso." provavelmente vale a pena mencionar que, embora a diferença entre o link "normal" e o link incremental possa não ser tão bom em termos de desempenho em tempo de execução, o link incremental é incompatível com a geração de código de tempo de link, o que pode fazer uma diferença drástica no desempenho.
Logan Capaldo

2
@Russel: Sim, vai. @Logan: Obrigado, atualizei minha resposta.
Saxon Druce

Então, isso significa que devemos desativar essa opção para compilações de produção?
RBT

1
@RBT, sim, você deve.
Ajay,

15

Além disso, muito importante, o link incremental é um pré-requisito para Edit&Continue- possivelmente editar seu código e recompilá-lo em tempo real, sem reiniciar.

Portanto, é uma boa coisa ter em compilações de depuração, mas não em compilações de lançamento.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.