Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite.
Conversando sobre o porque de códigos menres em Go possuírem um executável muito maior do que um mesmo código gerado em C, vejo pessoas falando que é devido ao fato de go usar linkagem estática e o C usar linkagem dinâmica.
M que isso significa? Qual é a mais vantajosa?
A diferença entre o modelo de linkagem dinamica e a linkagem estática é basicamente a seguinte:
Vou falar aqui só em C++, mas estende pra outras linguagens:
Como base, o C e o C++ funcionam da seguinte forma. Primeiro o compilador gera objetos separados para o seu código e depois para outros objetos que você usa em seu código (por exeplo a stdlib.h). Então ao final do código esses objetos são mesclados em um único código executável.
-
Linkagem Estática: A linkagem estática basicamente identifica todos os objetos que serão usados durante seu código e os compila em diversos objetos de código, então ele insere este código dentro do seu programa final, desta forma o código fica maior, porque ele literalmente copia a biblioteca, um exemplo, o compilador copiaria todo o código da stdlib.h e cola em seu código final (antes dele) e transforma em um único programa.
-
Linkagem Dinâmica: Este tipo de linkagem faz exatamente a mesma coisa do anterior, mas ao invés de ele inserir o código no programa final, basicamente o compilador adiciona ponteiros para estes arquivos externos que são chamados durante o tempo de execução, de forma que o seu programa "não vê o código final", porque este código é dinamicamente gerado.
Tem algumas respostas bem legais aqui:
-
http://stackoverflow.com/questions/311882/what-do-statically-linked-and-dynamically-linked-mean
-
http://stackoverflow.com/questions/1993390/static-linking-vs-dynamic-linking
Olá!
Sua dúvida me remeteu aos conceitos e práticas (atuais) sobre o uso de DLLs.
Você sabe o que são e para que servem?
[ ]'s