Profilazione con perf, VTune e Sanitizer
Profili i programmi con perf e Intel VTune e rilevi i bug con AddressSanitizer
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 reportperf 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 ./mainFlame 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.svgmacOS: 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 bugTempo 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:
- Misuri per identificare il collo di bottiglia
- Formuli un’ipotesi
- Modifichi una sola cosa
- 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.
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
- Layout dei dati ottimizzato per la cache
- Predizione dei branch e cicli hot
- Profilazione con perf, VTune e Sanitizer
- Microbenchmark con Google Benchmark