2011-06-13 11 views
5

¿Qué herramientas para sistemas Windows y Linux puedo usar para determinar problemas de alineación, errores de caché y otros parámetros relevantes para el código generado por Visual C++ y GCC? ¿Puedo usar estas herramientas para determinar la alineación de las estructuras para poder evitar el relleno generado por el compilador?Herramientas de optimización para C y C++

+1

El relleno automático elimina los problemas de alineación ... –

+4

En Stack Overflow sus preguntas deben formularse como preguntas y no como comandos, o dejarás a un lado muchos posibles contendientes. He editado tu publicación para reflejar esto. –

Respuesta

3

Para determinar caché pierde usted querrá un generador de perfiles de nivel de CPU, como oprofile o vtune, o una herramienta de instrumentación dinámico, como valgrind con cachegrind.

Para buscar problemas de alineación en las estructuras, hay una herramienta llamada pahole para archivos de objetos con DWARF información de depuración.

+0

Gracias por su respuesta. ¿Hay una herramienta para ventanas similar a la de fondo? Por cierto, ¿puedes elaborar o apuntar tutoriales sobre cómo habilitar los parámetros de caché en vtune/kcachegrind? – Kartlee

1

Si desea evitar el relleno en las estructuras de datos, puede usar __attribute__((__packed__)) para gcc o microsoft visual studio #pragma(pack(push,1)) antes de la declaración de su estructura #pragma(pop) después de la declaración de su estructura. También podría dar la opción de línea de comando al compilador visual/Zp1 de Microsoft Visual Studio para empacar en un byte http://msdn.microsoft.com/en-us/library/xh3e3fd0(v=vs.80).aspx o con gcc -falign-function = 8 para empacar en límites de 1 byte. Su código base sería más pequeño, sin embargo, esto podría tener serios efectos negativos en su rendimiento ...

+3

No solo rendimiento. Si tiene una struct {char, int} la int ya no estaría alineada correctamente, lo que significaría que ya no se actualizaría atómicamente. – Voo

+0

+1 No pensé en eso :) – DipSwitch

Cuestiones relacionadas