Qual é a diferença entre vinculação estática e dinâmica?


Melhor resposta

Antes de passar para a diferença, vamos ver o processo de vinculação em resumo.

Por que vinculador?

Quando você escreve algum código C (ou qualquer outra linguagem), ele é armazenado no formato .c.

#include

int main(){

printf("quora");

return 0;

}

Agora, este programa passa pela fase de compilação em que este o código-fonte é convertido em instruções em linguagem de máquina. Esses são os arquivos de objeto armazenados no formato .o ou .obj. Se tivermos 2 arquivos separados, teremos 2 arquivos obj separados. Esses arquivos são apenas a tradução do seu programa, para rodar esses programas temos que gerar um executável que o SO possa rodar. Para este propósito, usamos o vinculador.

Agora o vinculador cria um único arquivo executável a partir de muitos arquivos-objeto. Agora, em nosso programa C, usamos a função main (), mas onde está sua definição. O escopo do compilador é limitado a apenas um arquivo para que ele não procure por referências que possam ter sido declaradas e definidas em outros arquivos.

O vinculador pesquisa vários arquivos para esta definição de função “main ()” e liga-os. Agora chegando à sua pergunta.

Vinculação estática x dinâmica:

  1. Em vinculação estática , todos os módulos da biblioteca são copiados para a imagem executável final. Quando o programa é carregado, o OS coloca apenas um único arquivo na memória que contém o código-fonte e as bibliotecas de referência. Enquanto em vinculação dinâmica , apenas os nomes de bibliotecas externas ou compartilhadas são colocados na memória. A vinculação dinâmica permite que muitos programas usem uma única cópia do módulo executável.
  2. A vinculação estática é feita pelos vinculadores na etapa final da compilação, enquanto a vinculação dinâmica é feita em tempo de execução pelo sistema operacional.
  3. Arquivos estaticamente vinculados consome mais disco e memória porque todos os módulos já estão vinculados. Mas em Vinculação dinâmica, apenas uma cópia do módulo de referência é armazenada, a qual é usada por muitos programas, economizando memória e espaço em disco.
  4. Em Vinculação estática, se o programa de origem externa for alterado, eles deverão ser recompilados e vinculados novamente. Mas no caso de vinculação dinâmica , apenas um único módulo precisa ser atualizado e recompilado.
  5. Programas vinculados estaticamente são mais rápidos do que seus equivalentes dinâmicos.
  6. Como o arquivo estaticamente vinculado contém todos os pacotes e módulos, nenhum problema de compatibilidade ocorre. Considerando que em vinculação dinâmica , uma vez que os arquivos de biblioteca são armazenados separadamente, pode haver problemas de compatibilidade (digamos que um arquivo de biblioteca é compilado por uma nova versão do compilador).
  7. Programas vinculados estaticamente sempre levam tempo de carregamento constante, enquanto o tempo é variável em programas vinculados dinamicamente.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *