Google
 

martes, julio 25, 2006

Cache para compiladores

Visual C++ soporta el uso de cabeceras precompiladas que no es más que un caché para no tener que volver a parsear todos los archivos de cabeceras.

GCC lleva algo aún más interesante, gracias a ccache se evita que el compilador compile dos veces el mismo código, hayas borrado el código objeto o no. Si vuelves a compilar un archivo
con los mismos parámetros el código objeto resultante será el mismo así que es una tontería volver a compilarlo.

No es exactamente lo mismo que las cabeceras precompiladas de Microsoft pero ofrece un mayor rendimiento ya que además el caché puede ser compartido por todo el grupo de programadores. Si a eso le sumamos distcc para conseguir una compilación de forma distribuida podemos a obtener unas velocidades increíbles.

4 comentarios:

Anónimo dijo...

Pero Visual C++ solo compila el fichero que has modificado desde la ultima compilación. Igual que vienen haciendo todos los compiladorec desde MSDOS. Todo lo demás está compilado en la carpeta Debug o Release a falta de linkar solamente. O estas hablando de otra cosa y no te he entendido bien...

fiero

samsaga2 dijo...

Borra el archivo objeto y verás como te lo vuelve a compilar.

CCache no es más que un caché de lo que ya has compilado anteriormente (tu u otro ordenador).

fiero dijo...

Hombre, borrar el fichero OBJ es como borrar la caché, que imagino también se pográ "resetear" en CCache. Bueno, con los OBJ se consigue digamos una caché de compilación a nivel de ficheros. Imagino que CCache será algo más avanzado, guardando fragmentos compilados incluso a nivel de líneas, eso sí que es un gran avance (en el caso de ser así).

saludos

samsaga2 dijo...

La gracia real de CCache es poder compartir en una red local el cache con el resto de ordenadores del grupo.

Guarda la cache por archivo no por linia compilada. A primera vista no parece muy avanzado pero es bastante funcional. Hay otros proyectos para gcc que quieren ser un poco mas avanzados pero no dejan de ser experimentos.