Ir para conteúdo
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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

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