Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fabiocavalcante

Go Lang vs C: o que é linkagem estática e o que é linkagem dinâmica?

Recommended Posts

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

  1. http://stackoverflow.com/questions/311882/what-do-statically-linked-and-dynamically-linked-mean
  2. http://stackoverflow.com/questions/1993390/static-linking-vs-dynamic-linking

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.