KWALIFIKACJA INF3 - STYCZEŃ 2018

PYTANIE NR 29.
Wskaż błędny opis optymalizacji kodu wynikowego programu.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Optymalizacja kodu wynikowego służy głównie poprawie wydajności (np. skróceniu czasu wykonania, zmniejszeniu użycia zasobów) i może być wykonywana na różnych etapach kompilacji. Sprawdzenie zgodności z wymogami formalnymi dotyczy weryfikacji poprawności, a nie optymalizacji, więc jest błędnym opisem.

Pełne wyjaśnienie:

Optymalizacja kodu wynikowego programu to działania, których celem jest polepszenie parametrów wykonania bez zmiany znaczenia programu (tj. bez zmiany tego, co program robi, a jedynie jak efektywnie to robi). Typowe cele optymalizacji to m.in. krótszy czas wykonywania, mniejsze zużycie pamięci, mniejsza liczba operacji, lepsze wykorzystanie procesora lub zmniejszenie rozmiaru kodu wynikowego.

Stwierdzenie, że optymalizacja "może być prowadzona na różnych etapach pracy w celu zwiększenia szybkości wykonywania kodu przez procesor" jest zgodne z praktyką kompilatorów: część optymalizacji wykonuje się na reprezentacjach pośrednich, a część już blisko kodu maszynowego. Również zdanie, że "jej celem jest poprawienie wydajności programu", trafnie opisuje istotę optymalizacji.

Odpowiedź mówiąca o "modyfikacji kodu źródłowego do postaci, w której będzie działał szybciej" bywa rozumiana szerzej (optymalizacja może dotyczyć także refaktoryzacji lub ręcznych zmian w kodzie), jednak w kontekście pytania o optymalizację kodu wynikowego kluczowy jest efekt: szybsze działanie/większa wydajność. Nie jest to opis kontroli formalnej.

Natomiast stwierdzenie: "Jej celem jest sprawdzenie zgodności z wymogami formalnymi" opisuje etap kontroli poprawności (np. składniowej/semantycznej) i walidacji względem reguł, a nie optymalizację. Sprawdzanie wymogów formalnych ma na celu upewnienie się, że program jest poprawnie zapisany i może zostać poprawnie przetworzony, a nie to, by działał szybciej. Dlatego właśnie ten opis jest błędny w odniesieniu do optymalizacji kodu wynikowego.

Wskazówka egzaminacyjna: jeśli w odpowiedzi pojawiają się słowa typu "zgodność formalna", "poprawność składni", "weryfikacja", to zwykle dotyczy to poprawności/analizy, a nie optymalizacji. Optymalizacja niemal zawsze odnosi się do "wydajności", "czasu", "pamięci", "rozmiaru" lub "zużycia zasobów".

Dodatkowe pytania

Dodatkowe pytania (FAQ):
To działania (zwykle wykonywane przez kompilator), które mają poprawić parametry wykonania programu bez zmiany jego działania funkcjonalnego. Najczęściej chodzi o skrócenie czasu działania, zmniejszenie zużycia pamięci lub redukcję rozmiaru kodu.
Sprawdzanie wymogów formalnych dotyczy poprawności (np. czy kod jest zgodny ze składnią i regułami języka). Optymalizacja dotyczy wydajności. Program może być formalnie poprawny, ale wolny, i odwrotnie: nie da się zoptymalizować kodu, który nie przechodzi podstawowej weryfikacji.
Najczęstsze cele to: krótszy czas wykonania, mniejsze użycie pamięci, mniejsza liczba instrukcji i lepsze wykorzystanie procesora. Czasem celem jest też mniejszy rozmiar pliku wynikowego, co ma znaczenie np. w środowiskach o ograniczonych zasobach.
Optymalizacje mogą być wykonywane na różnych etapach: na reprezentacji pośredniej (łatwiej wykryć wzorce) oraz przy generowaniu kodu maszynowego (np. dobór instrukcji, alokacja rejestrów). Zależy to od kompilatora i wybranych opcji kompilacji.
Nie zawsze. Optymalizacja może być ukierunkowana na inne cele (np. mniejszy rozmiar kodu), a czasem zysk jest niewielki lub zależy od danych wejściowych. Dodatkowo agresywne optymalizacje mogą utrudniać debugowanie i analizę błędów.
Częsty błąd to mylenie optymalizacji z etapami sprawdzania poprawności (składnia/semantyka). Inny błąd to utożsamianie optymalizacji wyłącznie ze zmianą kodu źródłowego, gdy pytanie dotyczy kodu wynikowego i działań kompilatora.
Refaktoryzacja to zmiany w kodzie źródłowym poprawiające czytelność i strukturę bez zmiany zachowania. Optymalizacja skupia się na wydajności (czas, pamięć, zasoby) i często wykonuje ją kompilator na kodzie wynikowym lub pośrednim, niekoniecznie zmieniając źródła.
Tak, zwłaszcza po stronie serwera (np. kompilowany backend) i w środowiskach, gdzie ważna jest latencja i przepustowość. Po stronie frontendu częściej optymalizuje się bundling/minifikację, ale idea jest podobna: mniej pracy dla CPU i szybsze wykonanie.
Przykłady to: eliminacja martwego kodu, rozwijanie stałych, uproszczenia wyrażeń, usuwanie zbędnych obliczeń w pętli czy lepsze wykorzystanie rejestrów procesora. Na egzaminie zwykle wystarczy rozpoznać, że celem jest poprawa wydajności, a nie kontrola formalna.
Najpierw ustal definicję pojęcia (tu: optymalizacja = wydajność). Potem sprawdzaj, czy każda odpowiedź mówi o poprawie czasu/pamięci/zasobów. Jeśli któraś dotyczy weryfikacji formalnej, składni lub zgodności z regułami, to zwykle opisuje inny etap niż optymalizacja.
info

To pytanie poprawnie rozwiązuje 49% zdających egzamin. trudne

Specjaliści zwracają uwagę: "Optymalizacja kodu wynikowego służy głównie poprawie wydajności (np. skróceniu czasu wykonania, zmniejszeniu użycia zasobów) i może być wykonywana na różnych etapach kompilacji."

Źródła:

  • Aho, Lam, Sethi, Ullman, "Compilers: Principles, Techniques, and Tools", rozdziały dotyczące optymalizacji (Optimization of Intermediate Code / Code Generation) — wydanie książkowe (tzw. Dragon Book).
  • GNU Compiler Collection (GCC) Documentation: "Optimize Options" https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html - accessed 2026-02-18
  • Wikipedia (pl): "Optymalizacja kodu" https://pl.wikipedia.org/wiki/Optymalizacja_kodu - accessed 2026-02-18

Materiały:

  • Dokumentacja kompilatora (np. sekcje o opcjach optymalizacji)
  • Podstawy teorii kompilacji (podręcznik akademicki)
  • Materiały o profilowaniu i wydajności aplikacji (CPU, pamięć, I/O)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego