Perfilado con perf, VTune y sanitizers
Perfile programas con perf e Intel VTune y detecte errores con AddressSanitizer.
Perfilado con perf, VTune y sanitizers es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
¿Por qué perfilar?
La intuición sobre el rendimiento suele equivocarse. Perfile para encontrar los cuellos de botella reales y, después, optimice.
Linux: perf
perf es un perfilador de muestreo con poca sobrecarga que se incluye con Linux. Ejecútelo en cualquier binario compilado con información de depuración.
g++ -O2 -g main.cpp -o main
perf record ./main
perf reportperf stat
Imprime métricas resumidas —ciclos, instrucciones, fallos de caché y saltos mal predichos— de una ejecución.
perf stat -e cycles,instructions,cache-misses,branch-misses ./mainGráficos de llamas
Convierta los datos de perf en un gráfico de llamas que muestre dónde se emplea el tiempo.
perf record -F 99 -g ./main
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svgmacOS: Instruments
Instruments de Apple proporciona perfilado de tiempo, asignaciones, fugas y mucho más. Es gratuito con Xcode.
Windows: VTune Profiler
Intel VTune (gratuito para uso personal) ofrece análisis microarquitectónico detallado: detenciones de la segmentación, fallos de caché y bloques críticos. Es multiplataforma.
Los sanitizadores detectan errores
Los sanitizadores son comprobadores en tiempo de ejecución integrados en clang y gcc. Recompile con la opción adecuada:
-fsanitize=address: AddressSanitizer para errores de memoria-fsanitize=thread: ThreadSanitizer para carreras de datos-fsanitize=undefined: UB Sanitizer para desbordamientos con signo, entre otros errores-fsanitize=memory: MSan para lecturas de memoria no inicializada
Ejemplo de AddressSanitizer
Detecta desbordamientos de búfer, uso después de liberar y dobles liberaciones, mostrando trazas de pila.
g++ -fsanitize=address -g main.cpp
./a.out
# Output points exactly at the bugTiempo de compilación frente a tiempo de ejecución
El análisis estático (clang-tidy, cppcheck) encuentra errores sin ejecutar el programa. Los sanitizadores encuentran errores en tiempo de ejecución. Utilice ambos: detectan problemas diferentes.
Perfilado de asignaciones
Las asignaciones en el heap son lentas. Utilice perf, massif de Valgrind o Heaptrack para encontrar los puntos críticos de asignación y reducirlos.
Lectura de perfiles
Concéntrese en las funciones principales del perfil. Después, consulte el árbol de llamadas para comprender el contexto. Por lo general, no merece la pena optimizar diferencias de unos pocos puntos porcentuales.
Perfilado continuo
En producción, los perfiladores basados en muestreo, como Pyroscope o Pixie, recopilan datos continuamente con poca sobrecarga. Detecte las regresiones antes de que perjudiquen a los usuarios.
Flujo de trabajo
El ciclo de optimización:
- Mida para identificar el cuello de botella
- Formule una hipótesis
- Cambie una sola cosa
- Vuelva a medir
Sin mediciones, solo está haciendo suposiciones.
Comprobación rápida
¿Qué opción del compilador habilita AddressSanitizer?
Resumen
Perfile con perf (Linux), Instruments (macOS) o VTune (multiplataforma) para encontrar cuellos de botella. Utilice sanitizadores para detectar pronto errores de memoria y de concurrencia. Mida, formule una hipótesis, cambie algo y vuelva a medir.
Aprende C++ con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 51
- Lecciones
- 203
Preguntas frecuentes
¿La lección «Perfilado con perf, VTune y sanitizers» es gratis?
Sí — el texto completo de «Perfilado con perf, VTune y sanitizers» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Perfilado con perf, VTune y sanitizers»?
Perfile programas con perf e Intel VTune y detecte errores con AddressSanitizer. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Perfilado con perf, VTune y sanitizers»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Diseños de datos favorables a la caché
- Predicción de saltos y bucles críticos
- Perfilado con perf, VTune y sanitizers
- Microbenchmarking con Google Benchmark