Compiladores e código de máquina

Compreender uma toolchain de compilação clássica e a diferença entre fonte, objeto e executável.

Compiladores e código de máquina

Objetivo

Compreender uma toolchain de compilação clássica e a diferença entre fonte, objeto e executável.

Conceitos essenciais

Compilador

Transforma uma representação de programa em outra. Em uma toolchain C comum, fonte é transformada e ligada até gerar um executável ou biblioteca.

Fases

Pré-processamento, compilação, assembly e linkedição são fases conceituais comuns em C, embora ferramentas possam combiná-las.

Linker

Resolve símbolos e combina código objeto e bibliotecas para produzir artefatos ligados.

Arquitetura e plataforma

Um executável nativo é construído para determinada arquitetura e formato de plataforma; não é universalmente portável.

Otimização

Compiladores podem reorganizar e transformar código. Uma linha de fonte não corresponde necessariamente a uma instrução de máquina.

Modelo mental

FONTE .c → COMPILADOR/ASSEMBLER → OBJETO → LINKER → EXECUTÁVEL → PROCESSO

Exemplo e demonstração

Exemplo completo, opcional se houver GCC/Clang.

#include <stdio.h>

int main(void)
{
    printf("CENC Academy - exemplo C executado com sucesso.\n");
    return 0;
}

/* GCC: gcc hello.c -o hello */

Experimento / prática

  • Se houver compilador, compile o exemplo e execute.
  • Compare tamanho e natureza do arquivo .c com o executável gerado.
  • Explique por que o compilador não é a CPU.

Erros comuns

  • Todo compilador gera .exe.
  • Executável é portável para qualquer CPU.
  • Código-fonte e código objeto são a mesma coisa.

Resumo

Ao concluir esta aula, revise o modelo mental e tente explicá-lo com suas próprias palavras antes de avançar.

Conexão com a próxima aula

Na próxima aula veremos estratégias em que um runtime participa diretamente da execução.