Questão de Programação — Conceitos básicos de programação — FGV 2024
Programação›Conceitos básicos de programação
Código
fg085489
Banca
FGV
Órgão
INPE
Ano
2024
Nível
Superior
Cargo
Tecnologista Júnior I - Desenvolvimento de Software Embarcado
A técnica de “desenrolamento de loop” (loop unrolling) é uma técnica importante para obter mais desempenho de loops que acessam matrizes. Seu funcionamento envolve fazer múltiplas cópias do corpo do loop e executar o loop transformado menos vezes, o que reduz o overhead do loop e proporciona oportunidades para muitas outras otimizações.Assinale a opção que indica a etapa da conversão de programas de alto nível para um programa executável em que esta técnica se realiza.
AEtapa de contrução (builder).
BEtapa de compilação (compiler).
CEtapa de montagem (assembler).
DEtapa de carga (loader).
EEtapa de vínculo (linker).
Revelar gabarito e comentário▾
GabaritoB — Etapa de compilação (compiler).
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Loop Unrolling (Desenrolamento de Loop)
Gabarito: letra B. O desenrolamento de loop (loop unrolling) é uma otimização realizada pelo compilador (compiler) durante a etapa de compilação. O compilador transforma o código fonte de alto nível em código de máquina (ou código objeto) e aplica otimizações como essa para reduzir o número de iterações e o overhead do loop, aumentando o desempenho. As demais etapas (montagem, ligação, carga) atuam sobre representações de baixo nível e não realizam esse tipo de otimização.
A questão cobra o conhecimento das fases tradicionais de conversão de um programa de alto nível até o executável: compilação (tradução e otimização), montagem (geração de código de máquina), ligação (resolução de referências) e carga (carregamento na memória). Apenas a compilação efetua transformações estruturais no código, como o desenrolamento de loops.
Alternativa A — ❌ Incorreta
A etapa de construção (builder) não é uma fase padrão desse processo. O termo pode se referir a ferramentas de automação de compilação, mas a otimização propriamente dita ocorre no compilador.
Alternativa B — ✅ Correta ⟵ GABARITO
O compilador realiza otimizações como o desenrolamento de loop durante a compilação. Ele analisa o código fonte e gera uma versão transformada que reduz o overhead do loop.
Alternativa C — ❌ Incorreta
O montador (assembler) converte código assembly em código de máquina. Ele não realiza otimizações de alto nível, apenas tradução direta das instruções.
Alternativa D — ❌ Incorreta
O carregador (loader) coloca o programa na memória para execução. Não há transformação de código nessa etapa.
Alternativa E — ❌ Incorreta
O ligador (linker) combina módulos objeto e resolve referências externas. Embora possa realizar alguma otimização de ligação, não faz desenrolamento de loops, que exige análise sintática e semântica do código-fonte.
PEGA ESSA DICA!
Para lembrar: otimizações de alto nível (desenrolamento, inline, eliminação de código morto, etc.) são feitas pelo compilador, nunca pelo montador, ligador ou carregador.