C++ Academy · Lezione

Profilazione con perf, VTune e Sanitizer

Profili i programmi con perf e Intel VTune e rilevi i bug con AddressSanitizer

Lezione 3 di 415 passaggi

Profilazione con perf, VTune e Sanitizer è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.

Perché eseguire il profiling?

L’intuito sulle prestazioni è spesso sbagliato. Esegua il profiling per individuare i colli di bottiglia reali, quindi ottimizzi.

Linux: perf

perf è un profiler a campionamento con overhead ridotto, incluso in Linux. Lo esegua su qualsiasi binario compilato con le informazioni di debug.

g++ -O2 -g main.cpp -o main
perf record ./main
perf report

perf stat

Stampa le metriche riepilogative, ovvero cicli, istruzioni, cache miss ed errori di previsione dei branch, relative a un’esecuzione.

perf stat -e cycles,instructions,cache-misses,branch-misses ./main

Flame graph

Converta i dati di perf in un flame graph che mostra dove viene impiegato il tempo.

perf record -F 99 -g ./main
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg

macOS: Instruments

Instruments di Apple fornisce il profiling dei tempi, delle allocazioni, delle perdite di memoria e molto altro. È incluso gratuitamente in Xcode.

Windows: VTune Profiler

Intel VTune, gratuito per uso personale, offre un’analisi microarchitetturale dettagliata: stalli della pipeline, cache miss e blocchi hot. È multipiattaforma.

I sanitizer rilevano i bug

I sanitizer sono strumenti di controllo a runtime integrati in clang e gcc. Ricompili con il flag appropriato:

  • -fsanitize=address: AddressSanitizer per i bug di memoria
  • -fsanitize=thread: ThreadSanitizer per le race condition
  • -fsanitize=undefined: UB Sanitizer per l’overflow con segno e altro
  • -fsanitize=memory: MSan per le letture non inizializzate

Esempio di AddressSanitizer

Rileva gli overflow dei buffer, l’uso dopo la deallocazione e la doppia deallocazione, fornendo gli stack trace.

g++ -fsanitize=address -g main.cpp
./a.out
# Output points exactly at the bug

Tempo di compilazione vs tempo di esecuzione

L’analisi statica (clang-tidy, cppcheck) trova i bug senza eseguire il programma. I sanitizer trovano i bug a runtime. Utilizzi entrambi: rilevano problemi diversi.

Profiling delle allocazioni

Le allocazioni nell’heap sono lente. Utilizzi perf, massif di Valgrind o Heaptrack per individuare i punti caldi delle allocazioni e ridurli.

Leggere i profili

Si concentri sulle funzioni principali del profilo. Poi analizzi l’albero delle chiamate per comprenderne il contesto. Di solito non vale la pena ottimizzare differenze di pochi punti percentuali.

Profiling continuo

In produzione, profiler basati sul campionamento come Pyroscope o Pixie raccolgono continuamente dati con un overhead ridotto. Rilevi le regressioni prima che danneggino l’esperienza degli utenti.

Flusso di lavoro

Il ciclo di ottimizzazione:

  1. Misuri per identificare il collo di bottiglia
  2. Formuli un’ipotesi
  3. Modifichi una sola cosa
  4. Misuri di nuovo

Senza misurazioni, sta procedendo per tentativi.

Verifica rapida

Quale flag del compilatore abilita AddressSanitizer?

Riepilogo

Esegua il profiling con perf (Linux), Instruments (macOS) o VTune (multipiattaforma) per individuare i colli di bottiglia. Utilizzi i sanitizer per rilevare tempestivamente i bug di memoria e di concorrenza. Misuri, formuli un’ipotesi, modifichi e misuri di nuovo.

Gratis per iniziare

Impara C++ con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
51
Lezioni
203

Domande Frequenti

La lezione «Profilazione con perf, VTune e Sanitizer» è gratuita?

Sì — il testo completo di «Profilazione con perf, VTune e Sanitizer» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.

Cosa imparerò in «Profilazione con perf, VTune e Sanitizer»?

Profili i programmi con perf e Intel VTune e rilevi i bug con AddressSanitizer Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C++ Academy?

Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Profilazione con perf, VTune e Sanitizer»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C++ Academy?

Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Layout dei dati ottimizzato per la cache
  2. Predizione dei branch e cicli hot
  3. Profilazione con perf, VTune e Sanitizer
  4. Microbenchmark con Google Benchmark
← Torna a C++ Academy