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 → PROCESSOExemplo 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.